0

サーバー モジュールおよびクライアント Nexus Galaxy ICS として使用される WiBro。どちらのマシンも 3g UDP 通信です。サーバーは、実装された受信データのみを返します。

dSocket.send (sendPacket) はスムーズな通信です。しかし、問題があります。dSocket.receive (recvPacket) はデータを受信しません。

サーバーが送信するパケットが間違っていますか? クライアントがパケットを受信した場合は間違っていますか? サーバーはデータを送信しますが、通信機器は状況を維持するために取られますか?

パケットを送信するだけの場合、クライアントは問題ありません。しかし、受信コードの実装後、クライアントには問題があります。

private class ClientThread implements Runnable{

    @SuppressWarnings("finally")
    @Override
    public void run() {
        // TODO Auto-generated method stub
        DatagramSocket dSocket = null;
        try{
            InetAddress serverAddr = InetAddress.getByName(serverIpAddress.toString());
            Log.d(TAG, "Connecting");
            Log.d(TAG, "IP :::: " + serverAddr.toString());
            dSocket = new DatagramSocket(SERVERPORT);
            dSocket.setSoTimeout(5000);
            byte[] arr_RecvPacket = new byte[1024];
            connected = true;
            while(connected){
                try{
                    Log.d(TAG, "Sending Command :::: ( " + String.valueOf(i));
                    String strPacket = "Hey Server ( " + String.valueOf(i);
                    byte[] arr_Packet = strPacket.getBytes();
                    sendPacket = new DatagramPacket(arr_Packet, arr_Packet.length, serverAddr, SERVERPORT);
                    dSocket.send(sendPacket);
                    Log.d(TAG, "C:Send");
                    i++;
                    Log.d(TAG, "C:Make Recv Packet....");
                    recvPacket = new DatagramPacket(arr_RecvPacket, arr_RecvPacket.length);
                    Log.d(TAG, "C:Recving...");
                    dSocket.receive(recvPacket);
                    handler.sendEmptyMessage(0x01);
                    Thread.sleep(4000);
                }catch(Exception e){
                    e.printStackTrace();
                    Log.d(TAG, "S:Error");
                }
            }
            Log.d(TAG, "S:DataSocket close");
            dSocket.close();
        }catch(Exception e){
            Log.d(TAG, "C:Error");
            e.printStackTrace();
            connected = false;
        }finally{
            connected = false;
            if(dSocket != null){
                dSocket.close();
            }
            return;
        }
    }

}
4

1 に答える 1

0

サーバーが送信するパケットが間違っていますか?

になり得る。見ないとなんとも言い難い。着信データグラムに埋め込まれた IP:port に応答を返す必要があります。これを行う最も簡単な方法は、データを変更するだけで再利用することです。

クライアントが受信したパケットは間違っていますか?

それは大丈夫に見えます。

サーバーはデータを送信しますが、通信機器は状況を維持するために取られますか?

これが何を意味するのかわかりません。

于 2012-05-30T21:52:30.880 に答える