gpt4 book ai didi

c++ - 计算从客户端发送到服务器的数据包数量?

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:32 26 4
gpt4 key购买 nike

所以我几乎完成了一项涉及 Win32 编程和套接字的作业,但我必须生成并分析一些有关传输的统计信息。我遇到的唯一问题是如何计算从客户端发送到服务器的数据包数量。

发送的数据可以是可变长度的,所以我不能只将接收到的总字节数除以#define'd 值。

我们必须使用异步调用来完成所有操作,因此我一直在尝试为服务器套接字获取的每条 FD_READ 消息增加一个计数器。但是,因为我必须能够接受可能很大的文件大小,所以我必须调用缓冲区大小约为 64k 的 recv/recvfrom。如果我发送一个小数据包 (a-z),则没有问题。但是,如果我发送 1024 个字符的字符串 10x,服务器报告收到 2 或 3 个数据包,但就发送/接收的字节而言,数据丢失为 0%。

知道如何获取数据包的数量吗?

提前致谢:)

最佳答案

这实际上归结为“数据包”的含义。

您可能已经知道,当通过网络发送 TCP/UDP 消息时,发送的数据会“包装”或添加相应的 TCP/UDP header 。然后将其“包装”在 IP header 中,IP header 又“包装”在以太网帧中。如果您使用像 Wireshark 这样的嗅探包,您可以看到这个突破。

重点是这个。当我听到“数据包”一词时,我会想到 IP 级别的数据。 IP 数据在传输过程中是真正打包的,因此在谈论 IP 时,数据包计数是有意义的。但是,如果您使用常规套接字发送和接收数据,IP header 以及 TCP/UDP header 将被剥离,即您不会从套接字中获取此信息。如果没有这些信息,就不可能确定传输的“数据包”(同样,我认为是 IP)的数量。

您可以通过添加带有长度和计数器的自己的 header 来执行其他人的建议。此信息将帮助您准确确定接收缓冲区的大小,但不会帮助您确定数据包的数量(同样,IP...),尤其是在您使用 TCP 时。

如果您想准确确定使用 Winsock 套接字的数据包数量,我建议按照建议创建一个“原始”套接字 here .此套接字将收集本地 NIC 看到的所有 IP 流量。使用 IP 和 TCP/UDP header 根据您的客户端和服务器套接字(即 IP 地址和端口号)过滤数据。这将准确描述实际使用了多少 IP 数据包来传输您的数据。

关于c++ - 计算从客户端发送到服务器的数据包数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/586799/

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