0

Client.classでのみパケットを送信できますが、Server.classでパケットを受信できません。クライアントとサーバーは、いずれの場合も2つのスレッドです。更新するMainActivityには、ハンドラーを使用します。ハンドラーは機能しますが(テストしました)、Server.classは機能しません。

public class Client implements Runnable {

    //@Override
    public void run() {
        do{
            try {
                    InetAddress serverAddr = InetAddress.getByName(Server.CLIENTIP);

                    DatagramSocket socket = new DatagramSocket();

                    byte[] buf = ("Test").getBytes();

                    DatagramPacket packet = new DatagramPacket(buf, buf.length,serverAddr,Server.CLIENTPORT);

                    socket.send(packet);
                }     
            catch (Exception e) {}
        }
        while(open == true);
    }
}

public class Server implements Runnable {

public static String CLIENTIP = "192.168.0.13";//send-ip
public static String SERVERIP = "10.0.0.18";//receive-ip
public static final int CLIENTPORT = 5000; //send-port
public static final int SERVERPORT = 5001; //receive-port

 //@Override
    public void run() {
        do
        {
            try {
                DatagramSocket socket = new DatagramSocket(SERVERPORT);

                    byte[] buf = new byte[256];
                    DatagramPacket rpacket = new DatagramPacket(buf, buf.length);

                    socket.receive(rpacket);

                    String x = new String(rpacket.getData());
                    MainActivity.glText = x;        
                    MainActivity.mHandler.post(MainActivity.mTimer);

                } 
            catch (Exception e) {}
        }
        while(open == true);
    }
}

この問題の解決策はありますか?あなたの答えをありがとう!;)

4

2 に答える 2

1

貼り付けたコードを通信に使用しようとすると、送信しようとしているポート番号とは異なるポート番号でリッスンしています。

localhostアドレス (省略した場合のデフォルトのアドレス) にバインドしているため、デバイスの外部からサーバーに簡単に接続することはできません。

DatagramSocket socket = new DatagramSocket(SERVERPORT);

PC から到達可能なアドレスにバインドする必要があります。

DatagramSocket socket = new DatagramSocket(SERVERPORT02,
                        InetAddress.getByName(SERVERIP));
于 2012-05-23T11:00:46.713 に答える
0

エミュレーターを使用していますか?その場合、エミュレータがパケットを受信できるようにポートを転送する必要があります。

ポートをホストからエミュレータ デバイスにリダイレクトするには、次の形式で redir コマンドを使用します。 redir add ::

たとえば、宛先ポート 5001 の UDP パケットを同じポートのエミュレータに転送するには、以下を使用できます。 redir add udp:5001:5001

于 2012-05-23T12:10:33.587 に答える