UDP客户端向服务器发送数据,但没有收到响应

时间:2012-03-26 00:16:26

标签: java android

我正在创建一个可以与我的PC通信的简单Android应用程序。在我的计算机上,我有一个非常简单的Java服务器。

public void run(){

    try{
        DatagramSocket serverSocket = new DatagramSocket(port);
        byte[] receiveData = new byte[8];
        byte[] sendData = new byte[8];

        while(true)
           {
              DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
              serverSocket.receive(receivePacket);
              String sentence = new String( receivePacket.getData());
              System.out.println("RECEIVED: " + sentence);
              InetAddress IPAddress = receivePacket.getAddress();
              String sendString = "polo";
              sendData = sendString.getBytes();
              DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
              serverSocket.send(sendPacket);
           }
    }catch (Exception e){
    }
}

我在我的android应用程序中有另一段简单的代码,它将UDP数据包发送到服务器并等待响应。

public void checkServerOnline(View v) {
    try {
        int port = 46001;
        DatagramSocket clientSocket = new DatagramSocket();
        clientSocket.setSoTimeout(1800);
        InetAddress IPAddress = InetAddress.getByName(host);
        byte[] sendData = new byte[8];
        byte[] receiveData = new byte[8];
        String sentence = "marco";
        sendData = sentence.getBytes();
        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
        clientSocket.send(sendPacket);
        DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
        clientSocket.receive(receivePacket);
        clientSocket.close();
    } catch (Exception e) {
    }

我遇到的问题是我的客户正在等待响应。服务器肯定收到字符串“marco”,并且可能发送响应“polo”,但客户端没有收到它。我已经尝试删除客户端上的超时,但它只是冻结,直到我强行关闭应用程序。

任何人都可以在我的代码中看到错误吗?我不明白为什么它不起作用。我已成功设置了具有相同设置的TCP服务器和客户端,但似乎无法执行UDP。

1 个答案:

答案 0 :(得分:1)

服务器正在发送错误的端口。它应该在收到的数据报中发送到端口,而不是它自己的端口。最简单的方法是重用请求数据报,只需将数据更改为响应数据:返回地址已经存在。