gpt4 book ai didi

java - AutoBind DatagramSocket类似于java中的TCP Socket

转载 作者:行者123 更新时间:2023-12-02 05:11:26 26 4
gpt4 key购买 nike

java中的TCP套接字可用于连接到服务器,而无需手动绑定(bind)。

final Socket socket = SocketChannel.open().socket();
socket.connect(StaticData.vmAddress);
//can send receive data

但是当使用 DataGramSocket 时,似乎没有自动绑定(bind)功能。我试过这个:

DatagramSocket socketTest1 = DatagramChannel.open().socket();
socketTest1.connect(InetAddress.getByName(stunServer), stunServerPort);
socketTest1.setSoTimeout(timeout);
byte[] data = sendMH.getBytes();
DatagramPacket send = new DatagramPacket(data, data.length);
socketTest1.send(send); //got error at this point

堆栈跟踪:

java.net.BindException: bind failed: EINVAL (Invalid argument)
W/System.err﹕ at libcore.io.IoBridge.bind(IoBridge.java:89)
W/System.err﹕ at java.net.PlainDatagramSocketImpl.bind(PlainDatagramSocketImpl.java:68)
W/System.err﹕ at java.net.DatagramSocket.ensureBound(DatagramSocket.java:422)
W/System.err﹕ at java.net.DatagramSocket.send(DatagramSocket.java:263)
W/System.err﹕ at java.nio.DatagramChannelImpl$DatagramSocketAdapter.send(DatagramChannelImpl.java:559)
W/System.err﹕ at reach.project.stun.test.DiscoveryTest.test1(DiscoveryTest.java:103) //(socketTest1.send(send) line)

如果我也可以依赖 DatagramSocket 中的自动绑定(bind),那将会非常有帮助。有办法做到这一点吗?

最佳答案

要将 DatagramSocket 自动绑定(bind)到系统分配的端口,请使用 new DatagramSocket(0) 创建它。

关于java - AutoBind DatagramSocket类似于java中的TCP Socket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27302504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com