gpt4 book ai didi

c++ - 使用 recvfrom 获取数据

转载 作者:行者123 更新时间:2023-11-28 04:13:36 25 4
gpt4 key购买 nike

我想使用 recvfrom() 从套接字中检索数据

recvfrom() 允许获取包含 IP header 、TCP header 和数据的缓冲区。

有没有直接指向数据的快捷函数?我们是否应该将数据转换为主机(网络到主机)以便读取数据?

我不想使用 read() 因为 read() 没有提供 ip header 和 tcp header

我觉得应该是这样的:

recvfrom(sock, packet, sizeof(buf) - 1, 0, NULL, NULL);
iph = (struct iphdr*)packet;
iphlen = iph->ihl* 4;
tcph = (struct tcphdr*)(packet + iphlen);
tcphlen = tcph->doff * 4;

data = packet + iphlen + tcphlen;

但我不知道是否必须将数据转换为主机(网络到主机)?

最佳答案

假设使用了 SOCK_RAW 套接字。

IP头长度位于IP头第一个字节的低4位,32位整数。
TCP头长度位于TCP头第13字节高4位,32位整数。

根据/usr/include/netinet/ip.h/usr/include/netinet/tcp.hiph->ihltcph->doff 位字段已经考虑了字节顺序,并且由于它们的长度小于一个字节(4 位),因此它们不受任何进一步的 hton/ntoh 转换的影响。

关于c++ - 使用 recvfrom 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57126971/

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