Java中的UDP数据包路由

时间:2014-03-29 23:13:13

标签: java sockets udp packet osi

我有一个关于udp数据包生命/路由的问题。我有一个简单的客户端服务器UDP方案,在客户端有一个发送调用,在服务器端有一个接收调用。让我们说send方法被调用,数据包实际到达另一方但服务器的代码执行尚未到达接收方法调用。在那段时间内,数据包会发生什么。现在我尝试在接收调用之前使用简单的命令输入提示停止执行,等待一点然后让它继续并注意到数据包已收到。你能解释为什么会发生这种情况,比如它是否在不同的OSI级别上进行缓冲?

提前致谢。

2 个答案:

答案 0 :(得分:1)

每个TCP或UDP套接字都有一个发送缓冲区和一个接收缓冲区。您的数据报已经排队到发送方的发送缓冲区,然后它被发送,然后它被排队到接收方的接收缓冲区,然后你从那里读取它。

NB 与此无关。 TCP / IP不遵守OSI模型。它有自己的先前模型。

答案 1 :(得分:0)

“receive”方法调用不接收数据包。如果该端口的UDP套接字“打开”,则意味着分配了缓冲区空间,这就是NIC + OS放置数据的位置。当你打电话给“接收”时,它只是看着那里,如果那里有任何东西,那么它假装刚收到它。

我应该补充一点,如果缓冲区为空,那么接收调用会进入阻塞状态,等待操作系统通知某些内容已经到达。