ste*_*ita 2 c++ client-server communication packet-capture tcpdump
我写了一个简单的服务器和客户端应用程序,我可以在TCP,DCCP和UDP协议之间切换.目标是将文件从一个文件传输到另一个文件并测量每个协议的流量,因此我可以将它们与不同的网络设置进行比较(我大致知道结果应该是什么,但我需要精确的数字/图表).无论如何在不同的计算机上启动这两个应用程序并启动tcpdump后,我只能从tcpdump-log获取我的4GB文件中的前几个MB(~50MB).这些应用程序是用标准的C/C++代码编写的,可以在网络上的任何地方找到.可能是什么问题或者我在这里做错了什么?
- 编辑
我使用的命令行是:
tcpdump -s 1500 -w mylog
Run Code Online (Sandbox Code Playgroud)
tcpdump 仅在第一个~55秒内捕获数据包.这是客户端将文件发送到套接字所需的时间.之后它会停止,即使服务器继续接收文件并将文件写入硬盘驱动器.
- Edit2
源代码:
client.cpp
server.cpp
common.hpp
common.cpp
- 编辑最终
正如你们许多人指出的那样(而且我怀疑)源代码中存在一些误解/错误.在我清理它(或几乎重写了它)后,它可以根据需要使用tcpdump.我会接受@Laurent Parenteau的回答,但仅限于第5点.因为这是问题的唯一相关因素.如果有人对正确的代码感兴趣,那么它是:
源代码已编辑
代码中有很多错误.
这只是对代码的快速扫描,可能存在更多问题......
我的建议是:尝试使用TCP传输,执行读取/发送的文件的md5sum,以及接收/保存的文件的md5sum,并比较2 md5sum.一旦你的这个案例工作,你可以转向测试(仍然使用md5sum比较)与UDP和DCCP ...
对于tcpdump命令,您应该更改-s 1500
为-s 0
,这意味着unlimited
.使用该tcpdump命令,您可以信任它未发送/接收的数据.另一个好处是比较发送方的tcpdump输出和接收方.这样您就可以知道两个网络堆栈之间是否丢失了一些数据包.
归档时间: |
|
查看次数: |
2588 次 |
最近记录: |