gpt4 book ai didi

sockets - sendto() + recvfrom() 缓冲区混淆数据报

转载 作者:行者123 更新时间:2023-12-02 18:53:18 24 4
gpt4 key购买 nike

对一个概念感到困惑...

假设客户端调用sendto()两次,每次发送100字节的数据报到服务器。那么,如果服务器使用 200 字节的接收缓冲区调用 recvfrom(),它是否会将两个数据报接收到同一个缓冲区中?

据我所知..如果我执行 sendto(100) ,那么我将在同一个数据报传输“空间”上接收回 recvfrom(100)

但是由于它发送了 100 次中的两次..recvfrom(200) 会在不同的缓冲区上吗?

谢谢。

最佳答案

因为你使用的是UDP,如果你调用sendto 2次,你也会有2次recvfrom。完全保留数据包的内容。如果您发送 100 字节的 2 倍,您将永远不会收到 200 字节。

我必须警告您,UDP 是尽力而为。有可能数据包被丢弃,并且您只收到一个数据包(第一个或第二个),甚至根本没有数据包。

另一个警告,您必须确保接收缓冲区足够大,在您的描述中这是可以的,但是如果接收缓冲区太小,一些实现会丢弃数据包,一些实现会将其截断。

UDP 实际上是 IP 之上的一个非常薄的层。 IP 负责将数据包从一端传送到另一端。从用户的角度来看,正在发送的数据包未受影响。

关于sockets - sendto() + recvfrom() 缓冲区混淆数据报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30015205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com