socket编程中的丢包率测试。

daredjever 2010-02-22 11:41:52
大家好:
头一次接触socket编程。
现在已经有一个C++语言编写的socket程序,负责接收服务器发来的数据并转发到连接的多个客户端上。
用的都是简单的socket API编写的。
现在需要我来写一个这个数据接收和转发过程的丢包率检测程序,就是看看这个过程中有没有数据的遗漏。
socket的建立过程中采用的已经是TCP方式发送和接收数据了。
请大家给给思路。怎么去测试这个过程的丢包率。
...全文
1997 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
xurenheng 2010-08-25
  • 打赏
  • 举报
回复
怎么有的回复看不到...
daredjever 2010-02-26
  • 打赏
  • 举报
回复
引用 23 楼 dong364 的回复:
对tcp测试丢包率没必要,况且丢包率跟网络环境有关,检查下数据接收的完整性,以及解包的合理性


我现在就只能做检查数据的完整性这步了。至于涉及包的东西,不管是在包头加信息,还是什么解包,程序都没有涉及,我也不会。
就先这样吧。我就在接受端对比一下和发送端的数据总量是不是一样就好了。
至于包的问题,以后再慢慢研究了。这个程序没有丝毫的设计到包,数据的发送和接受时直接用seng和recv函数的,以字符串的形式发送接受,包的处理都是协议自己进行的。
谢谢大家,结贴
dong364 2010-02-25
  • 打赏
  • 举报
回复
对tcp测试丢包率没必要,况且丢包率跟网络环境有关,检查下数据接收的完整性,以及解包的合理性
WizardK 2010-02-25
  • 打赏
  • 举报
回复
流程:基站<->中转<->客户端
协议:TCP
实现方式:中转为TCP SERVER,接收来自基站和客户端的数据,并将数据转发至另一方。
验证方式:基站发起发送,数据格式内包含一个字节的索引值(起始值为0)和256个字节(依次0X00~0XFF),发送至中转后,立即转发至客户端,客户端收到后,验证包格式无误后,将索引值增加,并连带256个字节(从索引值开始,依次累加)发送至中转。。。往复测试

另外,你这个实际测的是你的中转的稳定性和在测试环境下的性能指标而已。
daredjever 2010-02-25
  • 打赏
  • 举报
回复
大家好:
问题说的是很不明确。写了这个数据转发程序,想测试是不是基站发的信息我都接收到了(其实也不知道基站发了多少,现在是模拟基站来发送)、我收到的信息是不是都转发给客户端了(这个可以在程序中计算确认)、还有转发给客户端的消息是不是都被客户端收到了(现在也是模拟基站接收)。
发现没法对“包”入手,都是从发送和接收的数据是否一致来对比的。大家说的包头加长度及信息等方法不知道怎么去使用,就是把消息当字符串发了,收的时候一条一条截取(回车符后是下一条)。
sksgod 2010-02-25
  • 打赏
  • 举报
回复
引用 22 楼 wizardk 的回复:
流程:基站 <->中转 <->客户端
协议:TCP
实现方式:中转为TCP SERVER,接收来自基站和客户端的数据,并将数据转发至另一方。
验证方式:基站发起发送,数据格式内包含一个字节的索引值(起始值为0)和256个字节(依次0X00~0XFF),发送至中转后,立即转发至客户端,客户端收到后,验证包格式无误后,将索引值增加,并连带256个字节(从索引值开始,依次累加)发送至中转。。。往复测试

另外,你这个实际测的是你的中转的稳定性和在测试环境下的性能指标而已。
...
FingerStyle 2010-02-25
  • 打赏
  • 举报
回复
不是丢包的问题, 估计是你解包的问题,
他就是大胖胖 2010-02-24
  • 打赏
  • 举报
回复
不能完全接收,就是程序设计的有问题,应该想办法避免,为什么要测试呢?
WizardK 2010-02-24
  • 打赏
  • 举报
回复
引用 18 楼 iorikingdom 的回复:
楼主的意思是,想要知道TCP连接,尽管连接上,想知道有没有在过程中丢包重传
上层可以用socket的tcp解决
下层用winpcap的统计模式+正则表达式解决


哦,这样的话,可以如此进行统计,但统计结果与软件设计无关啊,这和网络环境息息相关。
iorikingdom 2010-02-24
  • 打赏
  • 举报
回复
楼主的意思是,想要知道TCP连接,尽管连接上,想知道有没有在过程中丢包重传
上层可以用socket的tcp解决
下层用winpcap的统计模式+正则表达式解决
WizardK 2010-02-23
  • 打赏
  • 举报
回复
引用 16 楼 daredjever 的回复:
引用 14 楼 wizardk 的回复:
用TCP的方式,错误重发,保证不了?

      现在就是测试,怕网络质量不好的时候数据丢失嘛,需要一个测试方法。因为要给客户长期使用的东西,需要全面保证质量。


重发何来丢失?
daredjever 2010-02-23
  • 打赏
  • 举报
回复
引用 14 楼 wizardk 的回复:
用TCP的方式,错误重发,保证不了?


现在就是测试,怕网络质量不好的时候数据丢失嘛,需要一个测试方法。因为要给客户长期使用的东西,需要全面保证质量。
daredjever 2010-02-23
  • 打赏
  • 举报
回复
引用 11 楼 bragi523 的回复:
TCP,你只需要保证接收完整就好了,传输过程底层已经做了丢包重传机制,不需要你自己做
发送接收要有自己的协议,每个包加上自己的包长,来保证接收完全



你好:
程序中只是用到了简单的socket api,根本就没有接触到包的概念,数据的发送接受都是通过一个缓冲区获取数据的。请问你说的给包加包长怎么实现呢?我需要不停的发送很多条数据,一条数据是一条字符串的形式出现的。这里是不是一条数据就是一个包?
WizardK 2010-02-23
  • 打赏
  • 举报
回复
引用 13 楼 daredjever 的回复:
引用 10 楼 wizardk 的回复:
你的最终目的到底是为了获取丢包率还是保证低丢包率?


    最终目的是保证低丢包率,途径就是测试当前程序的丢包率,如果还ok,那就ok了。交差。如果不行,就需要修改了。


用TCP的方式,错误重发,保证不了?
daredjever 2010-02-23
  • 打赏
  • 举报
回复
引用 10 楼 wizardk 的回复:
你的最终目的到底是为了获取丢包率还是保证低丢包率?



最终目的是保证低丢包率,途径就是测试当前程序的丢包率,如果还ok,那就ok了。交差。如果不行,就需要修改了。
bragi523 2010-02-23
  • 打赏
  • 举报
回复
TCP,你只需要保证接收完整就好了,传输过程底层已经做了丢包重传机制,不需要你自己做
发送接收要有自己的协议,每个包加上自己的包长,来保证接收完全
WizardK 2010-02-23
  • 打赏
  • 举报
回复
引用 8 楼 daredjever 的回复:
引用 6 楼 wizardk 的回复:
要想验证丢包率,建议你使用UDP这种无连接的方式,因为TCP的握手、连接确认、接收确认等报文都会引起额外的网络负荷。发送端发送带索引的报文,失败不重发,接收端依据索引判断是否丢包。


  我的目的不是为了学习测试丢包率,而是已经实现了一个数据转发程序,在交给客户使用之前,公司需要进行一下测试,看看我们的转发过程是否会造成数据的丢失。也就是数据发送的丢包或者我们中间转发过程的处理不当或不及时造成的数据丢失!
  程序的功能是转发,从一个服务器接收数据,然后转发给一个客户端。先作为一个客户端从服务器获得数据,然后以服务器的身份发给其他的客户端。


你的最终目的到底是为了获取丢包率还是保证低丢包率?
daredjever 2010-02-23
  • 打赏
  • 举报
回复
引用 7 楼 flydreamgg 的回复:
如果数据不大的话可以定义一个结构体:
struct DATAPACK
{
  int  nIndex;
  char pData[1024];
};
发送端发送DATAPACK *并填充nIndex,接收端检验nIndex就可以了!!


数据很大,由于我们是中间的转发,所以获得数据的时候就是一条一条的字符串数据,我们叫做消息。所以像你说的对每条消息再进行封装成结构体太麻烦,而且只能保证一条消息中内容是否丢失,不能检测整条消息丢失的情况。
daredjever 2010-02-23
  • 打赏
  • 举报
回复
引用 6 楼 wizardk 的回复:
要想验证丢包率,建议你使用UDP这种无连接的方式,因为TCP的握手、连接确认、接收确认等报文都会引起额外的网络负荷。发送端发送带索引的报文,失败不重发,接收端依据索引判断是否丢包。



我的目的不是为了学习测试丢包率,而是已经实现了一个数据转发程序,在交给客户使用之前,公司需要进行一下测试,看看我们的转发过程是否会造成数据的丢失。也就是数据发送的丢包或者我们中间转发过程的处理不当或不及时造成的数据丢失!
程序的功能是转发,从一个服务器接收数据,然后转发给一个客户端。先作为一个客户端从服务器获得数据,然后以服务器的身份发给其他的客户端。
WizardK 2010-02-22
  • 打赏
  • 举报
回复
每包添加包索引(可以是自增的),发送端发送失败不重发,接收端按照包索引验证丢包率
加载更多回复(5)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧