我正在创建一个可以与我的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。
答案 0 :(得分:1)
服务器正在发送错误的端口。它应该在收到的数据报中发送到端口,而不是它自己的端口。最简单的方法是重用请求数据报,只需将数据更改为响应数据:返回地址已经存在。