gpt4 book ai didi

java - Java 的 DatagramSockets 会失效还是可以永远使用而不会出现问题?

转载 作者:行者123 更新时间:2023-12-01 14:22:51 27 4
gpt4 key购买 nike

我们使用 DatagramSocket 通过 UDP 发送消息。目前我们使用以下代码。

private void doSend() throws IOException, SocketException {
try (DatagramSocket clientSocket = new DatagramSocket()) {
byte[] messageBytes = message.getBytes(Charset.forName("UTF-8"));
DatagramPacket sendPacket = new DatagramPacket(messageBytes, messageBytes.length, address,
port);
clientSocket.send(sendPacket);
}
}

如您所见,我们为每条消息重新创建了DatagramSocket。出于性能原因,我们考虑仅创建一次套接字,而不是为每条消息创建套接字。该代码存在于一个长期存在的对象中,因此这意味着套接字可以存活几天。

我的问题是 DatagramSocket 是否会因某些错误而变得无效并且必须重新创建,或者我们是否可以简单地创建一次套接字并使用它?如果它可能变得无效并且必须重新创建,我们如何检测到这一点?

最佳答案

唯一使 DatagramSocket 无效的事情是:

  1. 关闭它。在这种状态下使用它会导致SocketException:套接字已关闭。

  2. 绑定(bind)失败。在这种状态下使用它可能会导致默认的bind()发生,到0.0.0.0:0,这将产生一个系统分配的端口,这可能不是你想要的。

  3. 将其连接到无效地址,在这种情况下发送可能会失败并且接收不会执行任何操作:您可以通过 disconnect() 恢复。

关于java - Java 的 DatagramSockets 会失效还是可以永远使用而不会出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17399659/

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