我想模拟使用Java的UDP。我正在将一个文件从一台主机发送到另一台主机。这是接收器的一部分: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秒内不执行任何操作,我的Receiver将关闭,因此不会发送任何内容。
有没有办法在不指定超时的情况下终止循环?
我还想知道是否有另一个主机建立连接的方法 - 像ServerSocket.accept(),它基本上等待另一个主机连接。但是,我决定使用DatagramSocket,我可以找不到解决这个问题的办法。
有没有人知道会执行此操作的方法?
等等,你是否想让接收器打开直到发送者发送文件? –
UDP是无连接协议。没有连接的概念,只有单个数据包。也不保证这些数据包将以正确的顺序到达。这听起来像你想TCP,而不是UDP ... –
@RileyCarney好主意是不使用超时,但能够表明所有的字节已发送 –