2013-02-27 2 views
2

Сервер на ПК:Android приложение не получает пакеты 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 ARE NOT NULL. В андроида приложения нить работает:

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

UPDATE: Я попробовал простую программу send-receive, и это тоже не сработало: client ждет пакет от server перед отображением.

+0

Так что эмулятор использует 10.0.2.2 в качестве адреса сервера? Более того, для реального Android-устройства IP-сервер обычно похож на 192.168. *. * - поэтому вам понадобятся разные конфигурации для эмулятора и вашего устройства. Вы это учитывали? – cyroxx

+0

Я не уверен в том, что проблема с эмулятором может быть проблемой, но поскольку я жестко закодировал каждый ip, я мог бы думать о сервере на компьютере. Я не думаю, что это проблема. –

+0

Ну, [согласно документам] (http://developer.android.com/tools/devices/emulator.html#emulatornetworking) IP-эмулятор должен быть 10.0.2.15, но, очевидно, вы уже пробовали это. Может быть, глупый вопрос, но я предполагаю, что и сервер, и эмулятор работают на одной машине? – cyroxx

ответ

0

Кажется, что ваш сервер или порт недоступен с устройства. Вы используете какой-либо HTTP-сервер на своем компьютере, вы можете использовать браузер, чтобы проверить его.

В качестве альтернативы вы можете использовать код - Обратитесь к ценам ниже Android: How to check if the server is available? How to test if a remote system is reachable

+0

Я могу отправлять сообщения на сервер, сервер сначала ждет сообщения от приложения Android, это ip на эмуляторе, о котором я не уверен. –

+0

Привет, можете ли вы ясно объяснить, как происходит поток прямо сейчас? Кто инициирует последовательность и если пакеты, отправленные клиентом, получены на сервере или наоборот. Может быть, просто написать его шаг за шагом поможет. Спасибо –

+0

1.datagram socket on на pc-сервере ждет порт 57111 для пакета датаграммы через метод приема –

Смежные вопросы