2016-10-16 2 views
-2

Я разрабатываю приложение чата с использованием UDP. У меня проблема при получении номера порта другого партнера. Я могу получить адрес узла-партнера, но не порт, от которого пришел ответ/запрос. Можно получить номер порта партнера, который отправил мне запрос/ответ.UDP, получающий номер порта другого партнера (Java)

Вот мой код:

private Thread bcastListen = new Thread(PeerDiscovery.class.getSimpleName() 
     + " broadcast listen thread") { 
    @Override 
    public void run() { 
     try { 

      byte[] buffy = new byte[5]; 
      buffy[2] = (byte) 4000; 
      DatagramPacket rx = new DatagramPacket(buffy, buffy.length); 

      while (!shouldStop) { 
       try { 
        buffy[0] = 0; 

        bcastSocket.receive(rx); 

        int recData = decode(buffy, 1); 
        if (buffy[0] == QUERY_PACKET && recData == group) { 
         byte[] data = new byte[5]; 
         data[0] = RESPONSE_PACKET; 
         encode(peerData, data, 1); 
         DatagramPacket tx 
           = new DatagramPacket(data, data.length, rx.getAddress(), port); 
         System.out.println(peerData); 
         lastResponseDestination = rx.getAddress(); 
         bcastSocket.send(tx); 
        } else if (buffy[0] == RESPONSE_PACKET) { 
         if (responseList != null && !rx.getAddress().equals(lastResponseDestination)) { 
          synchronized (responseList) { 
           responseList.add(new Peer(rx.getAddress(), rx.getPort())); //here am trying to get the port of the host which the response came from (Doesn't work) 
          } 
         } 
        } 
       } catch (SocketException se) { 
        System.out.println("Some exception"); 
       } 
      } 

      bcastSocket.disconnect(); 
      bcastSocket.close(); 
     } 

Спасибо за ваше время.

ответ

1

Адрес источника входящей дейтаграммы доступен через DatagramPacket.getPort().

но не порт

Я не знаю, почему не. Вы считали, что консультируетесь с Javadoc?

NB простой способ сделать то, что вы делаете, это просто отправить полученный пакет. Нет необходимости строить еще один.

bcastSocket.disconnect(); 

Вы не заехали bcastSocket.connect(), поэтому эта строка кода бесполезно. Убери это.

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