Android UDP客户端不接收DatagramPacket

时间:2012-05-30 11:28:22

标签: android sockets udp

WiBro,用作服务器模块和客户端Nexus Galaxy ICS。 这两台机器都是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;
        }
    }

}

1 个答案:

答案 0 :(得分:0)

  

服务器发送的数据包是错误的吗?

可能。很难说没有看到它。它应该将回复发送回嵌入在传入数据报中的IP:端口。最简单的方法是重复使用它,只需更改数据。

  

客户端收到的数据包是错误的吗?

看起来不错。

  

服务器发送数据但是,电信设备被占用   保持这种情况?

我不知道这意味着什么。