2016-10-16 4 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()を呼び出していないので、このコードは無駄です。それを除く。

関連する問題