使用Java和Dynamic C通过WiFi连接套接字

时间:2012-07-06 14:03:14

标签: java sockets wifi tcpclient tcplistener

好的,所以我在通过WiFi发送数据时遇到了一些小问题。我有一个Rabbit RCM5400W WiFi板,我需要向它发送数据。我在Java中创建了一些客户端/服务器套接字示例,它们运行在localhost端口5000上,并且能够发送和接收数据。我现在正在尝试创建一个通过WiFi运行的程序,它将回显客户端(Java)发送服务器的任何信息(动态C)。到目前为止,我的所有连接都已超时或抛出“java.net.ConnectException:Connection refused”。任何帮助连接这两个将不胜感激。

动态C服务器

     #class auto

     #define TCPCONFIG             1
     #define _PRIMARY_STATIC_IP    "10.10.6.100"
     #define _PRIMARY_NETMASK      "255.255.255.0"
     #define MY_GATEWAY            "10.10.6.1"
     #define MY_NAMESERVER         "10.10.6.1"
     #define IFC_WIFI_SSID         "rabbitTest"
     #define IFC_WIFI_ROAM_ENABLE  1
     #define IFC_WIFI_ROAM_BEACON_MISS  20
     #define IFC_WIFI_CHANNEL      1
     #define IFC_WIFI_MODE         IFPARAM_WIFI_ADHOC
     #define IFC_WIFI_REGION       IFPARAM_WIFI_REGION_AMERICAS
     #define IFC_WIFI_ENCRYPTION   IFPARAM_WIFI_ENCR_NONE

#use "dcrtcp.lib"


#define PORT 5000


void main()
{
int bytes_read;
/*
    Unless STDIO_ENABLE_LONG_STRINGS is defined, printf() has max 127 bytes
    it can output.  For this sample, we'll read in a maximum of 100 bytes
    at a time.
*/
char    buffer[100];
tcp_Socket socket;

// Start network and wait for interface to come up (or error exit).
sock_init_or_exit(1);

while(1) {
    tcp_listen(&socket,PORT,0,0,NULL,0);

    printf("Waiting for connection...\n");
    while(!sock_established(&socket) && sock_bytesready(&socket)==-1)
        tcp_tick(NULL);

    printf("Connection received...\n");

    do {
        bytes_read=sock_fastread(&socket,buffer,sizeof(buffer)-1);

        if(bytes_read>0) {
            buffer[bytes_read]=0;
            printf("%s",buffer);
            sock_write(&socket,buffer,bytes_read);
        }
    } while(tcp_tick(&socket));

    printf("Connection closed...\n");
 }
} 

Java客户端

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client implements Runnable {
// The socket connecting us to the server

private Socket socket;
// The streams we communicate to the server; these come
// from the socket
private DataOutputStream dout;
private DataInputStream din;

// Constructor
public Client(String host, int port) {

// Connect to the server
    try {
// Initiate the connection
            socket = new Socket(host, port);
// We got a connection! Tell the world
            System.out.println("connected to " + socket);
// Let's grab the streams and create DataInput/Output streams
// from them
            din = new DataInputStream(socket.getInputStream());
            dout = new DataOutputStream(socket.getOutputStream());
// Start a background thread for receiving messages
        new Thread(this).start();
    } catch (IOException ie) {
        System.out.println(ie);
    }
    //create a variable to hold how many times we send a message
    int counter = 1;

    //continuously accept user messages from console
    while (true) {
        Scanner kb = new Scanner(System.in);
        //we only want to display this message on startup 
        if (counter == 1) {
            System.out.println("Send:");
        }
        processMessage(kb.nextLine());
        counter++;
    }
}

// Gets called when the user types something
private void processMessage(String message) {
    try {
// Send it to the server
        dout.writeUTF(message);     
    } catch (IOException ie) {
        System.out.println(ie);
    }
}
// Background thread runs this: show messages from other window

@Override
public void run() {
    try {
        // Receive messages one-by-one, forever
        while (true) {
           // Get the next message
            String message = din.readUTF();
           // Print it to our text window
            System.out.println("Recieved: " + message);
           //add a new line for user input
            System.out.println("Send:");
        }
    } catch (IOException ie) {
        System.out.println(ie);
    }
   }
 }

Java RunClient程序

public class ClientRun {

public static void main(String[] args) {
    //we will run the client on port 5000, the same as the server
    int port = 5000;
    //create a new client on WiFi Router port 5000
    new Client("10.10.6.100",port);
 }
}

1 个答案:

答案 0 :(得分:1)

如果出现“连接超时”,可能意味着客户端无法获取任何网络数据包到服务器。如果你得到一个“连接被拒绝”,这意味着客户端能够通过一个数据包,但是它没有任何东西可以监听新连接。

在任何一种情况下,问题很可能不在Java代码中,而是在您的网络设置中;例如在两端配置WiFi网络,网络接口,路由和/或防火墙以及数据包过滤器的方式。

你应该从简单的事情开始:

  • 您可以从客户端的命令行“ping”服务器吗?

  • 您可以从命令行建立TCP / IP网络连接;例如使用telnetnc连接到服务器端口?