farid wahed Ответов: 1

проблема получение UDP сообщения в android


the server which is in my emulator dose never receive the server class is this :

public class Server implements Runnable {
 
        
        public static final String SERVERIP = "192.168.1.102"; // 'Within' the emulator!
        public static final int SERVERPORT = 2060;
         
        public void run() {
                
        	            Log.e("receive","new socket");
                        DatagramSocket socket = null;
						try {
							socket = new DatagramSocket(SERVERPORT);
						} catch (SocketException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} 
                       
                        byte[] buf = new byte[1024];
                        Log.e("receive","new packet");
                        DatagramPacket packet = new DatagramPacket(buf, buf.length);
                        try {
							socket.setSoTimeout(10000);
						} catch (SocketException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
                       
                        Log.e("receive","receive !");
                        try {
							socket.receive(packet);
							Log.e("receive",new String(packet.getData()));
														
						}catch (SocketTimeoutException e){Log.e("receive","time out");}
                        catch (IOException e) {Log.e("receive","error 1");
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
                        
                        Log.e("receive","end");
                        
                        
                        
                
        }
}

and the sender is :

public class UDPClient
{
        public static void main(String args[]) throws IOException
        {
        	InetAddress ip=InetAddress.getByName("192.168.1.102");
        	DatagramSocket socket=new DatagramSocket();
            byte[] outData = ("helloooo").getBytes();
            
            DatagramPacket out = new DatagramPacket(outData,outData.length,ip ,2060);
            socket.send(out);
            System.out.println("Send >>> ");
                        
            
        }
}

1 Ответов

Рейтинг:
5

H.Brydon

Одна из особенностей UDP, которая обычно пишется большими жирными буквами на странице 1 любого описания, заключается в том, что UDP-пакеты не гарантированно доставляются. Отправитель выплевывает данные с "Аве Мария", и ни один слой в стеке протоколов никогда не оглядывается назад.

Несколько предложений для дальнейшего успеха:
- Если ваш слушатель не получает ожидаемого пакета, отправьте его снова
- Убедитесь, что процесс прослушивания запущен до того, как отправитель
- Работает ли этот код с отправителем/получателем на одной машине?
- Убедитесь, что ваша локальная сеть не имеет UDP-фильтрации для указанного порта (моя-нет)
- Вы уверены, что слушатель действительно не получил пакет? (Что происходит в регистраторе, который вы используете? Все ли буферы сброшены? Запустите прослушиватель в отладчике, чтобы увидеть, захватывает ли он какие-либо данные).


farid wahed

Спасибо, но я перенес все эти предложения , но все равно не получаю, если я отправляю с моего ПК на эмулятор ПК-сервер получаю сообщение, но с ПК на android дозу не получаю, что мне делать ?

H.Brydon

Определите, где сетевое подключение не завершено. Работает ли тот же трафик на TCP? Можете ли вы подтвердить, что UDP-пакет поступает в разные части сети?

...это то, что отладка это все о!

farid wahed

я нашел проблему, это эмулятор не получает, но я пробую его в своем телефоне, и это работает ^_^