[英]UDP client sending data to server, but not receiving response
我正在創建一個可以與PC通訊的簡單Android應用。 在我的計算機上,我有一個非常簡單的Java UDP服務器。
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。
服務器發送到錯誤的端口。 它應該發送到接收到的數據報中的端口,而不是自己的端口。 重用請求數據報並將數據更改為響應數據是最簡單的:返回地址已經存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.