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
Java中的UDP包路由_Java_Sockets_Udp_Packet_Osi - Fatal编程技术网

Java中的UDP包路由

Java中的UDP包路由,java,sockets,udp,packet,osi,Java,Sockets,Udp,Packet,Osi,我有一个关于udp数据包生命/路由的问题。我有一个简单的客户机-服务器UDP方案,在客户机端有一个发送调用,在服务器端有一个接收调用。假设send方法被调用,数据包实际上到达了另一端,但服务器的代码执行尚未到达receive方法调用。这段时间包会发生什么情况。现在,我尝试在receive调用之前用一个简单的命令输入提示符停止执行,稍等片刻,然后让它继续,并注意到数据包已被接收。你能解释一下为什么会发生这种情况,比如它是在不同的OSI级别上缓冲的吗 提前感谢。每个TCP或UDP套接字都有一个发送缓

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


提前感谢。

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

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

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


我应该补充一点,如果缓冲区是空的,那么receive调用会进入阻塞状态,等待操作系统通知某个消息已经到达

这是假设他已经设置了
DatagramSocket
(即
DatagramSocket服务器=新的DatagramSocket(端口)
,我想他已经有了,在这种情况下,应该有一个接收缓冲区,正如你所说的那样。@Jared显然是这样。如果他没有创建套接字,数据不会在任何地方排队,问题也不会存在。如果你自己的回答有点推测性,UDP会从NIC得到一个中断,拉出数据,确保它是用于一个非端口-现有端口,将其丢弃,并发出ICMP错误消息。