2012-07-06 70 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