在Android上接收UDP数据包

时间:2012-09-02 13:43:29

标签: android udp nat android-networking

我尝试在Android应用和服务器之间连续发送和接收UDP数据包。

有没有办法让这种情况发生?

我现在的网络代码(在线程中运行)如下所示。客户端通过3G连接。端口配置的客户端是1088。

服务器只在收到时将数据包回送给客户端。 服务器从客户端正确接收数据包,但客户端没有收到任何回传。

InetAddress serverAddr = InetAddress.getByName(SERVERIP);

Log.d(TAG, "S: Connecting...");
DatagramSocket socket = new DatagramSocket();
DatagramSocket receive_socket = new DatagramSocket(SERVERPORT, InetAddress.getByName("0.0.0.0"));

while(running) {
    DatagramPacket packet_send = new DatagramPacket(msg, msg.length, serverAddr, SERVERPORT);
    Log.d(TAG, "C: Sending: '" + new String(msg) + "'");
    socket.send(packet_send);

    // Prepare a UDP-Packet that can contain the data we want to receive
    DatagramPacket packet = new DatagramPacket(buf, buf.length);
    Log.d(TAG, "S: Receiving...");

    // Receive the UDP-Packet
    receive_socket.receive(packet);
    Log.d(TAG, "S: Received: '" + new String(packet.getData()) + "'");
    synchronized (this) {
        wait(500);
    }
}

我怀疑3G连接是NATed(服务器报告的端口与1088不同)。 如果是这样,我能做些什么来克服这个问题吗? 或者我的代码中有什么问题吗?

1 个答案:

答案 0 :(得分:0)

原来代码工作正常,3G服务提供商阻止了一些UDP数据包。