我究竟做错了什么?我的Socket不会收到发送给它的数据

时间:2011-02-21 12:34:04

标签: android networking android-emulator udp

我有一个单独的C#程序,它将数据发送到我在其中指定的任何IP地址。数据的编码方式是我可以再次对其进行解码(UTF-8)并通过UDPClient发送。我已经设置了这个程序来将数据发送到我机器上的一个端口,然后转发到Android Emulator。在我的应用程序中,我在此端口上设置了一个DatagramSocket,但我的接收调用不会向我返回任何数据......

我确定数据已发送,当我在send语句上调试C#程序时,我发现它实际上发送了数据...我怀疑它是我的Socket设置中的东西,但我不知道我不知道......

private void updateUDPSocket(String IpAddress, String IpPort){
    Inet4Address ownIpAddress = null;
    int ownIpPort = 0;

    /*
     *  Try to recover the correct Inet4Address & Port.
     *  Catch all possible exceptions as well.
     */
    try{
        ownIpAddress = (Inet4Address) Inet4Address.getByName(IpAddress);
        ownIpPort = Integer.parseInt(IpPort);
    } catch (UnknownHostException uhe){
        uhe.printStackTrace();
    } catch (NumberFormatException nfe){
        nfe.printStackTrace();
    }

    // Check to see if the current socket is already initialised.
    if(mUDPSocket != null){
        // If so, close & nullify it.
        mUDPSocket.close();
        mUDPSocket = null;
    }

    // Create a new socket & catch the possible exception.
    try{
        mUDPSocket = new DatagramSocket(ownIpPort, ownIpAddress);
        mUDPSocket.setSoTimeout(TIME_OUT_IN_MILLIS);
    } catch (SocketException se){
        se.printStackTrace();
    }

    // Log current set address & port.
    Log.d(TAG, "UDPSocket set to address:" +
        mUDPSocket.getLocalAddress() + ":" + mUDPSocket.getLocalPort());
}

我在这里传递的IP地址是0.0.0.0(在模拟器的情况下)或从WifiManager恢复的IP地址(在移动设备的情况下)。 它在设置Socket时没有失败,但是每个人都使用错误的地址?

我从receive方法获得的唯一输出是接收超时的错误消息...

1 个答案:

答案 0 :(得分:1)

我现在知道没有错,我现在已经在真实设备上测试了它,它将在Socket上接收数据......