2013-02-26 54 views
1

嘗試使用java.nio.channels.DatagramChannel完成一個基本的UDP客戶端接收器。我有以下的放在一起:java.nio.channels.DatagramChannel基本的UDP RX客戶端連接

DatagramChannel dc = DatagramChannel.open(); 
dc.setOption(StandardSocketOptions.SO_RCVBUF, Integer.MAX_VALUE); 
dc.configureBlocking(true); 
int listeningPort = 4445; 
dc.connect(new InetSocketAddress(listeningPort)); 
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(2048); 
dc.read(byteBuffer); 

我讓我的電話綁定例外連接:

Exception in thread "main" java.net.BindException: Cannot assign requested address: connect 
    at sun.nio.ch.Net.connect0(Native Method) 
    at sun.nio.ch.Net.connect(Unknown Source) 
    at sun.nio.ch.DatagramChannelImpl.connect(Unknown Source) 

我已經試過周圍切換端口,沒有運氣...什麼想法?

我一直在關注: http://tutorials.jenkov.com/java-nio/datagram-channel.html

如果我做的:

dc.socket().bind(new InetSocketAddress(listeningPort)); 

,而不是連接,我得到:

Exception in thread "main" java.nio.channels.NotYetConnectedException 
at sun.nio.ch.DatagramChannelImpl.read(Unknown Source) 

回答

4

我之前做類似的東西,那就是我的代碼位:

DatagramChannel datagramChannel = DatagramChannel.open(); 
    DatagramSocket datagramSocket = datagramChannel.socket(); 
    datagramSocket.setReuseAddress(true); 
    datagramSocket.bind(new InetSocketAddress(HOST, PORT)); 
    datagramSocket.connect(address); 
    datagramChannel.configureBlocking(false); 

    datagramChannel.register(selector, SelectionKey.OP_READ); 

HOST = "localhost"PORT = 19000

+0

什麼是選擇器? – 2013-02-26 02:49:21

+0

這是一個Channel選擇器'import java.nio.channels.Selector;'然後'selector = Selector.open();' – knowbody 2013-02-26 02:53:11

+0

很酷,這有幫助。看起來問題出在我的InetSocketAddress上。如果我指定「localhost」,則工作。我需要它綁定到所有接口,但? – 2013-02-26 02:53:33