1
我正在創建一個簡單的Android應用程序,可以與我的PC通信。在我的電腦上,我有一個非常簡單的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。
您是否使用Wireshark或其他網絡嗅探器來檢查服務器是否實際發送響應? – Thomas 2012-03-26 00:17:27
我沒有,但我現在就做了。服務器正在發送響應。問題在於它將它發送到錯誤的端口。我需要在服務器中添加代碼來檢查數據包來自哪個端口。我認爲它只是與目的地港口相同 - 不知道爲什麼。感謝Wireshark提示 – 2012-03-26 00:28:21