[英]Java - closing the UDP socket
我正在尝试使用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。 Receiver获取所有数据包并终止,但由于超时而终止。
因此,如果打开我的接收器并且10秒内没有执行任何操作,我的接收器将关闭,因此不会传输任何内容。
有没有一种方法可以在不指定超时的情况下终止循环?
我还想知道是否有其他主机建立连接的方法 - 比如ServerSocket.accept(),它基本上等待其他主机连接。但是,我决定使用DatagramSocket而我找不到解决方案这个问题。
有人知道会执行此操作的方法吗?
没有。
数据报(UDP)套接字本质上是无连接的。 关闭DatagramSocket
没有任何对远程系统可见的影响。 它可以防止应用程序在该套接字上发送或接收任何其他数据,并释放该端口以供本地系统上的其他应用程序使用,但不会导致通过网络发送任何通知。
如果要通知远程服务器您已完成发送数据,则需要向它们发送数据报以通知它们。
如果您尝试通过UDP传输文件,请记住,不保证收到UDP数据包,也不保证按照传输顺序接收UDP数据包! (也就是说,它们可能会被网络丢弃或重新排序。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.