Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can Java';s的数据报套接字无效,或者可以永久使用而不会出现问题?_Java_Sockets_Udp - Fatal编程技术网

Can Java';s的数据报套接字无效,或者可以永久使用而不会出现问题?

Can Java';s的数据报套接字无效,或者可以永久使用而不会出现问题?,java,sockets,udp,Java,Sockets,Udp,我们正在使用DatagramSocket通过UDP发送消息。目前我们使用以下代码 private void doSend() throws IOException, SocketException { try (DatagramSocket clientSocket = new DatagramSocket()) { byte[] messageBytes = message.getBytes(Charset.forName("UTF-8")); Data

我们正在使用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无效的东西是:

  • 关闭它。在此状态下使用它将导致一个
    SocketException:socketclosed。

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

  • 将其连接到一个无效地址,在这种情况下,发送可能失败,接收将无效:您可以通过
    disconnect()
    从中恢复


  • 谢谢你的回复。这意味着在我们的情况下1)没有问题,我们可以控制它何时关闭。2) 没有问题,因为绑定发生在创建时。3) 也不会是问题,因为我们没有连接它。