0

さて、WiFi経由でデータを送信しているときに、いくつかの小さな問題が発生しました. Rabbit RCM5400W WiFi ボードがあり、それにデータを送信する必要があります。Java でいくつかのクライアント/サーバー ソケットの例を作成しました。これらは localhost ポート 5000 で実行され、データを送受信できました。私は現在、クライアント(Java)がサーバー(Dynamic C)に送信する情報をエコーバックするWiFi上で実行されるプログラムを作成しようとしています。これまでのところ、すべての接続がタイムアウトするか、「java.net.ConnectException: 接続が拒否されました」をスローしました。これら2つを接続するための助けをいただければ幸いです。

動的 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);
 }
}
4

1 に答える 1

1

「接続タイムアウト」が発生した場合は、クライアント側がサーバーへのネットワーク パケットを取得できなかったことを意味している可能性があります。「接続が拒否されました」というメッセージが表示された場合は、クライアント側がパケットを通過できたが、新しい接続をリッスンしていないことを意味します。

どちらの場合も、問題は Java コードではなく、ネットワーク設定にある可能性が高いです。たとえば、WiFi ネットワーク、ネットワーク インターフェイス、ルーティングおよび/またはファイアウォール、およびパケット フィルタを構成した方法で...両端で。

おそらく簡単なことから始める必要があります。

  • クライアントのコマンドラインからサーバーに「ping」できますか?

  • コマンド ラインから TCP/IP ネットワーク接続を確立できますか。たとえば、telnetまたはncサーバーポートに接続するために使用しますか?

于 2012-07-06T14:23:50.043 に答える