gpt4 book ai didi

Java - 关闭UDP套接字

转载 作者:行者123 更新时间:2023-11-29 04:51:08 25 4
gpt4 key购买 nike

我正在尝试使用 Java 模拟 UDP。我正在将文件从一台主机发送到另一台主机。这是接收器的一部分:

server.setSoTimeout(10000);     
while (true)
{
try
{
DatagramPacket received = new DatagramPacket(receivedData,receivedData.length);
server.receive(received);
out.write(received.getData());
}
catch (IOException e) {
break;
}



}
server.close();

这个解决方案有效,但出于某种原因我对它不满意。

发件人发送所有数据包,然后关闭 DatagramSocket。接收方获取所有数据包并终止,但由于超时而终止。

因此,如果打开我的接收器并且在 10 秒内不执行任何操作,我的接收器将关闭,因此不会传输任何内容。

有没有办法在不指定超时的情况下终止循环?

我也想知道是否有其他主机建立连接的方法 - 类似于 ServerSocket.accept(),它基本上等待其他主机连接。但是,我决定使用 DatagramSocket 但我不能找到解决此问题的方法。

有人知道可以执行此操作的方法吗?

最佳答案

没有。

数据报 (UDP) 套接字本质上是无连接的。关闭 DatagramSocket 不会对远程系统产生任何影响。它阻止应用程序在该套接字上发送或接收任何进一步的数据,并释放端口供本地系统上的其他应用程序使用,但它不会导致通过网络发送任何通知。

如果您想通知远程服务器您已完成发送数据,则需要向他们发送一个数据报以通知他们。

如果您尝试通过 UDP 传输文件,请记住 UDP 数据包不能保证被接收,也不能保证它们以与传输相同的顺序被接收! (也就是说,它们可能会被网络丢弃或重新排序。)

关于Java - 关闭UDP套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35351261/

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