Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-关闭UDP套接字_Java_Sockets - Fatal编程技术网

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

我正在尝试使用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数据包不保证接收,也不保证以相同的传输顺序接收!(也就是说,它们可能会被网络删除或重新排序。)

请稍候,是否希望在发送方发送文件之前保持接收器打开?UDP是一种无连接协议。没有连接的概念,只有单个数据包。也不能保证这些数据包会以正确的顺序到达。听起来你想要的是TCP,而不是UDP…@RileyCarney好吧,想法不是使用超时,而是能够指示所有字节都已被删除sent@AndrewWilliamson所以我假设第一部分是不可能更改的,那么第二部分呢?如果你仍然想使用UDP,请看一看是的,我知道它们不一定会到达,所以我想知道是否有更好的方法来编写这部分代码。那我问题的第二部分呢?基本上现在,我有10秒的时间启动发送器,否则连接将过期。我知道理论上应该会这样,但有没有办法在发送方启动后开始传输?@JohnnyBravo如果你想能够接受传入连接、检测远程关闭、避免数据包丢失和重新排序,请使用TCP套接字。他们的全部目的就是为你解决这些问题。