繁体   English   中英

Java - 关闭UDP套接字

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM