社区首页 >问答首页 >如何计算数据包负载中的字节数?问如何计算数据包负载中的字节数?ENStack Overflow用户提问于 2016-11-21 02:02:08回答 1查看 1.6K关注 0票数 0有客户端和服务器,在应用层,客户端向服务器发送随机有效载荷大小的数据包。这意味着一个分组可以是1300字节,下一个分组可以是450字节,并且下一个分组可以是1449字节,依此类推。在服务器端,如何读取从客户端传入的有效负载数据?您的套接字应该读取多少数据?考虑到客户端无法发送它正在发送的有效负载大小的事实。服务器如何区分1300、450和1449字节的单独数据包?我们在C中使用POSIX套接字,并在应用层工作。任何代码片段都会很有帮助。
csockets关注问题分享EN回答 1推荐最新Stack Overflow用户发布于 2016-11-21 02:50:47
通常,您只需发出一个缓冲区大到足以容纳您期望的最大数据报的recv()即可。返回值将反映数据报的实际大小。
POSIX没有指定检查下一个数据报大小的方法(除了读取它)。
但是,对于某些协议,Linux和BSD系统会这样做;对于其他协议,它将返回已接收的可供读取的字节数。例如,如果您使用的是UDP socket,则可以使用FIONREAD ioctl()。下面是一个例子:
代码语言:javascript运行复制#include
#include
size_t unread(const int socketfd)
{
int length = 0;
if (ioctl(socketfd, FIONREAD, &length))
return 0;
if (length < 0)
return 0;
return (size_t)length;
}当然,这并不能真正告诉您是否有接收到的数据挂起。首先,它可能是在ioctl()之后刚刚到达的。此外,还可以发送长度为零的数据报。上面的函数将在两者(没有接收到数据报,接收到长度为零的数据报)以及错误(套接字协议不支持ioctl)上返回零。
收藏分享票数 0EN页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持原文链接:https://stackoverflow.com/questions/40707479
复制相关文章