Java-关闭UDP套接字
我正在尝试使用Java模拟UDP。我正在将文件从一个主机发送到另一个主机。这是接收器的一部分:Java-关闭UDP套接字,java,sockets,Java,Sockets,我正在尝试使用Java模拟UDP。我正在将文件从一个主机发送到另一个主机。这是接收器的一部分: server.setSoTimeout(10000); while (true) { try { DatagramPacket received = new DatagramPacket(receivedData,receivedData.length); server.receive(received); out.write
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数据包不保证接收,也不保证以相同的传输顺序接收!(也就是说,它们可能会被网络删除或重新排序。)请稍候,是否希望在发送方发送文件之前保持接收器打开?UDP是一种无连接协议。没有连接的概念,只有单个数据包。也不能保证这些数据包会以正确的顺序到达。听起来你想要的是TCP,而不是UDP…@RileyCarney好吧,想法不是使用超时,而是能够指示所有字节都已被删除sent@AndrewWilliamson所以我假设第一部分是不可能更改的,那么第二部分呢?如果你仍然想使用UDP,请看一看是的,我知道它们不一定会到达,所以我想知道是否有更好的方法来编写这部分代码。那我问题的第二部分呢?基本上现在,我有10秒的时间启动发送器,否则连接将过期。我知道理论上应该会这样,但有没有办法在发送方启动后开始传输?@JohnnyBravo如果你想能够接受传入连接、检测远程关闭、避免数据包丢失和重新排序,请使用TCP套接字。他们的全部目的就是为你解决这些问题。