2013-10-19 108 views
0

這是我的代碼:異步UDP如何從java中的客戶端獲取ip和端口?

channel = DatagramChannel.open(); 
     socket = channel.socket(); 
     channel.configureBlocking(false); 
     socket.bind(new InetSocketAddress(3000)); 
     selector = Selector.open(); 
     channel.register(selector, SelectionKey.OP_READ); 
     ByteBuffer buffer = ByteBuffer.allocate(65536); 

     while(true) 
     { 
      if(selector.select()>0) 
      { 
       Set<SelectionKey> selectionKeys = selector.selectedKeys(); 
       Iterator iterator = selectionKeys.iterator(); 
       while(iterator.hasNext()) 
       { 
        SelectionKey key = (SelectionKey)iterator.next(); 
        iterator.remove(); 
        InetSocketAddress isa = (InetSocketAddress) channel.getRemoteAddress(); 
        if(key.isReadable()) 
        { 
         System.out.print(isa.getAddress().getHostAddress()+":"+isa.getPort()); 
        } 
       } 
      } 
     } 

的ISA是null.I想要得到DatagramPack的SocketAddress像socket.receive(DatagramPack);但我不知道渠道如何得到它。使用Channel.getSocketAddress()retun Null。

回答

2

UDP是無連接協議,因此您將無法找到通道的遠程地址,因爲沒有這種東西。一旦你打開一個UDP端口進行監聽,每個人都可以發送消息,而不需要建立直接連接。您收到的每封郵件都可能來自不同的發件人。

您可以做的是檢索消息的遠程地址。檢查DatagramChannel.receive()方法:它將填充消息的緩衝區,並返回該特定消息的發件人地址。