我正在尝试使用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,我可以&#39 ;找到解决这个问题的方法。
有人知道会执行此操作的方法吗?
答案 0 :(得分:3)
没有
数据报(UDP)套接字本质上是无连接的。关闭DatagramSocket
没有任何对远程系统可见的影响。它可以防止应用程序在该套接字上发送或接收任何其他数据,并释放该端口以供本地系统上的其他应用程序使用,但不会导致通过网络发送任何通知。
如果要通知远程服务器您已完成发送数据,则需要向他们发送数据报,通知他们。
如果您尝试通过UDP传输文件,请记住,不保证收到UDP数据包,也不保证按照传输顺序接收UDP数据包! (也就是说,它们可能会被网络丢弃或重新排序。)