当前位置: 首页 > 面试题库 >

通过recvfrom(UDP)接收一部分数据包

蒋嘉颖
2023-03-14
问题内容

我正在尝试通过recvfrom接收数据包的一部分。它实际上是这样的:

recvfrom(sockfd, serialised_meta, 12, flags, src_addr, addrlen);
recvfrom(sockfd, serialised_buf, BUFLEN, flags, src_addr, addrlen);

数据是这样发送的:

 bufd->Serialise(serialised_buf, BUFLEN+12);
 sendto(sockfd, serialised_buf, BUFLEN+12, flags, dest_addr, addrlen);

因此,想法是先读取一些元数据,然后再决定是否接收其他内容。问题是如果第二个缓冲区(serialised_buf)开头,我会收到4个’/
0’字节。这似乎不是序列化的问题,我以前使用过序列化,并且在我一次接收到整个数据包(元和数据)的同时,一切都很酷。关于如何解决的任何想法?

PS。我知道我可以跳过不必要的字节)但是无论如何,为什么会发生这种情况?


问题答案:

UDP不是“流”协议…一旦执行了初始recvfrom,包的其余部分就会被丢弃。第二个recvfrom正在等待下一个数据包…



 类似资料:
  • 我正在尝试接收raspberry PI上的UDP数据包。我已经创建了一个简单的java程序来连接网络。(我下面有所有相关代码) 我不能从广播中接收到任何东西,在一个覆盆子圆周率。但当我在另一台计算机上运行此代码时,我能够从广播中接收数据包。这让我相信java没有被授予创建套接字、绑定端口的权限,并且它不是代码,而是raspberry PI上的一种安全措施。 null 没有运气。如有任何建议或帮助,

  • 我不知道是网络配置还是我的软件出了问题。 这是监听代码: 奇怪的是,在wireshark上,我可以看到:数据包已从发送到,并且设备已对此数据包作出响应--来自的数据包已发送到。使用bind(0.0.0.0,端口)似乎不能涵盖。我迷路了,一点主意都没有。 ifconfig为:

  • 我知道从套接字中读取后立即返回。我的问题是- > 如果我请求了2000的buflen,而套接字队列中的单个数据包大小为2400,该怎么办? 如果我请求了2000的buflen,而套接字队列中的单个数据包大小为1400,该怎么办? 上述问题的答案是否适用于TCP和UDP?如果没有,有什么区别。 请提前回复。

  • 我在JAVA中通过TCP接收字节数据包时遇到了一些问题。我的TCPServer类发送207字节的数据包。当我发送一个数据包时,控制台中的程序显示“读取207字节的数据包”然后停下来。在下一个数据包继续执行时,显示“多重测量”和“读取1868767867字节数据包”。之后,接收将永远停止。我不知道它为什么接收1868767867字节。我在wireshark中检查它,服务器总是发送207字节。 这是我

  • 我们现有的软件定期向本地子网(X.X.X.255)上的特定端口(7125)广播UDP数据包。我们的监控软件运行在HP-UX(11.11)上,可以接收这些数据包,没有问题。然而,在将监控软件移植到Linux(RHEL6.1)之后,我们发现它并没有接收到广播数据包。tcpdump显示了到达Linux主机的数据包,但内核不会将它们发送给我们的软件。 我使用了几个Python2.x脚本,这些脚本模拟了监控