2012-07-06 18 views
0

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

动态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

如果你得到一个 “连接超时” 这可能意味着,客户端WASN”能够获得任何网络数据包到服务器。如果你得到了“连接被拒绝”,这意味着客户端能够获得一个数据包,但是什么都没有听到新的连接。

在这两种情况下,最有可能不是Java代码中的问题,而是在您的网络设置中;例如按照您配置WiFi网络,网络接口,路由和/或防火墙以及数据包过滤器......的方式进行配置。

你或许应该用一些简单的开始:

  • 能否“ping”的从客户端上的命令行服务器?

  • 您能否通过命令行建立TCP/IP网络连接;例如使用telnetnc连接到服务器端口?

+0

谢谢。这是一个网络问题。这非常有帮助。 – user1506919 2012-07-10 13:08:54