【发布时间】:2019-07-20 17:17:21
【问题描述】:
我想用recvfrom()从套接字中检索数据
recvfrom() 允许获取包含 IP 标头、TCP 标头和数据的缓冲区。
是否有直接指向数据的快速函数? 我们是否应该将数据转换为主机(网络到主机)才能读取数据?
我不想使用read(),因为read()不提供ip头和tcp头
我觉得应该是这样的:
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;
但我不知道是否必须将数据转换为主机(网络到主机)?
【问题讨论】:
-
答案需要一个例子。
-
char *data = buf + sizeof(ip_hdr) + sizeof(tcp_hdr)。无需转换数据。
-
@sergeyrar tcp 标头的大小是可变的。 ANd 可以从 TCP 标头的 HLEN 字段中检索到
-
recvfrom()没有获得包含所有标头的缓冲区。只是数据。在 TCP 流中包含标头是没有意义的。
标签: c++ c networking