【问题标题】:java.nio.channels.DatagramChannel basic UDP RX client connectjava.nio.channels.DatagramChannel 基本 UDP RX 客户端连接
【发布时间】:2013-02-26 02:37:19
【问题描述】:

尝试使用 java.nio.channels.DatagramChannel 做一个基本的 UDP 客户端接收器。我整理了以下内容:

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)

【问题讨论】:

    标签: java udp nio


    【解决方案1】:

    我以前做过类似的事情,这就是我的代码:

        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

    【讨论】:

    • 这是一个频道选择器import java.nio.channels.Selector;,然后是selector = Selector.open();
    • 酷,这有帮助。看起来问题出在我的 InetSocketAddress 上。如果我指定“localhost”,则可以使用。我需要它绑定到所有接口吗?
    • Here 更多关于选择器的信息
    • 是的,正在看那个。我想我不需要它,因为我只有一个频道
    • 好的,一旦我确认我可以从远程主机发送,就会给你支票和投票。谢谢!
    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 2018-02-27
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多