簡體   English   中英

Android應用程序未收到UDP數據包

[英]Android application not receiving UDP packets

服務器在PC上:

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();
}

ipAddrportNb字段不為空。 在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中,我已經硬編碼了我的PC的IP地址,在服務器端,我嘗試了10.0.2.2、10.0.2.15以及使用問題的第二個答案的方法獲得的IP地址。

我在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方面,消息不會到達,receive方法將等待直到超時。 它具有權限

  • android.permission.INTERNET
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.ACCESS_WIFI_STATE
  • android.permission.CHANGE_WIFI_MULTICAST_STATE

更新 :我嘗試了一個簡單的發送-接收程序,但也沒有用: 客戶端在顯示之前先等待服務器的數據包。

似乎無法從設備訪問服務器或端口。 如果您在計算機上運行任何HTTP Server,則可以使用瀏覽器進行測試。

或者,您可以使用代碼-請參閱下文-Android:如何檢查服務器是否可用? 如何測試遠程系統是否可以訪問

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM