服務器Android應用程序是在PC上:沒有收到UDP報文
sendData = "server msg here".getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData,
sendData.length, ipAddr, portNb);
try {
sendSock.send(sendPacket);
Thread.sleep(1000);
System.out.println("sent msg");
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
字段ipAddr
和portNb
不爲空。在Android應用程序中的線程運行:
sendSocket = new DatagramSocket();
sendSocket.setSoTimeout(3000);
sendSocket.setReuseAddress(true);
//...
try {
receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
System.out.println("droid now is "
+ new String(receivePacket.getData()));
} catch (IOException e) {
e.printStackTrace();
}
我用兩側的57111端口,我已經重定向它在相同的端口上的Android模擬器。
在Android中,我硬編碼了我的電腦的IP地址,而在服務器端,我嘗試了10.0.2.2,10.0.2.15以及通過使用第二個答案的方法獲得的IP地址this問題。
我已經設置了超時在Android方面的插座和軌跡是:
`02-27 23:12:57.907: W/System.err(13993): java.net.SocketTimeoutException: Try again
02-27 23:12:57.907: W/System.err(13993): at org.apache.harmony.luni.platform.OSNetworkSystem.recv(Native Method)
02-27 23:12:57.917: W/System.err(13993): at dalvik.system.BlockGuard$WrappedNetworkSystem.recv(BlockGuard.java:321)
02-27 23:12:57.927: W/System.err(13993): at org.apache.harmony.luni.net.PlainDatagramSocketImpl.doRecv(PlainDatagramSocketImpl.java:172)
02-27 23:12:57.927: W/System.err(13993): at org.apache.harmony.luni.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:181)
02-27 23:12:57.927: W/System.err(13993): at java.net.DatagramSocket.receive(DatagramSocket.java:402)
02-27 23:12:57.938: W/System.err(13993): at com.example.testinger.ReceiveThread.run(ReceiveThread.java:39)
02-27 23:12:58.987: W/KeyCharacterMap(13993): No keyboard for id 0
02-27 23:12:58.987: W/KeyCharacterMap(13993): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
02-27 23:12:59.377: W/IInputConnectionWrapper(13993): showStatusIcon on inactive InputConnection
02-27 23:13:00.947: W/System.err(13993): java.net.SocketTimeoutException: Try again
02-27 23:13:01.057: W/System.err(13993): at org.apache.harmony.luni.platform.OSNetworkSystem.recv(Native Method) `
我也試了一下實際的手機上,結果都是一樣的。在Android端,消息不會到達,接收方法會一直等到它超時。它具有的權限
- android.permission.INTERNET對
- android.permission.ACCESS_NETWORK_STATE
- android.permission.ACCESS_WIFI_STATE
- android.permission.CHANGE_WIFI_MULTICAST_STATE
更新:我嘗試了一個簡單的發送 - 接收程序,但也不起作用: client等待來自的數據包3210顯示之前。
所以仿真器使用10.0.2.2作爲服務器地址?而且,對於真正的Android設備,服務器的IP通常是192.168. *。*這樣的 - 所以您需要對模擬器和設備進行不同的配置。你有沒有考慮到這一點? – cyroxx 2013-02-27 23:41:03
我不確定模擬器的ip可能是問題,但是因爲我硬編碼了每個ip,所以我可以將它想到pc上的服務器上,我不認爲這是問題所在。 – 2013-02-27 23:45:20
那麼,[根據文檔](http://developer.android.com/tools/devices/emulator.html#emulatornetworking)模擬器的IP應該是10.0.2.15,但顯然你已經嘗試過了。也許一個愚蠢的問題,但我假設服務器和模擬器運行在同一臺機器上? – cyroxx 2013-02-28 00:16:31