当前位置: 技术问答>linux和unix
socket编程问题,大家指教。
来源: 互联网 发布时间:2016-04-05
本文导语: 现在要写一个网络测试程序:就是很简单的从host端或client端发包,从另一端收。但是现在要求以一个固定的速度发这个包,比如:2M ,不知要怎么做?linux socket中有这类函数吗?小弟以前没做过这个,大家指点。 ...
现在要写一个网络测试程序:就是很简单的从host端或client端发包,从另一端收。但是现在要求以一个固定的速度发这个包,比如:2M ,不知要怎么做?linux socket中有这类函数吗?小弟以前没做过这个,大家指点。
谢谢了
谢谢了
|
up up
|
socket没有限制速度的函数,要自己实现。
给出一种思路:
while (1)
{
get_current_time(); //先获取当前时间,可以用gettimeofday
send_data(2M); //发送2M的数据,send, write, sendto都行
get_current_time2(); //获取发送数据后的时间
usleep(1s - (time2 - time1)); //假如传输只花了0.3s,则需要睡眠0.7s,使得整体传输速度控制在2M/s
}
以上思路前提是你的网速 > 2m/s, 如果网络比要求的速度还慢,那就是迅雷、飞鸽传书等软件做的事情了。
给出一种思路:
while (1)
{
get_current_time(); //先获取当前时间,可以用gettimeofday
send_data(2M); //发送2M的数据,send, write, sendto都行
get_current_time2(); //获取发送数据后的时间
usleep(1s - (time2 - time1)); //假如传输只花了0.3s,则需要睡眠0.7s,使得整体传输速度控制在2M/s
}
以上思路前提是你的网速 > 2m/s, 如果网络比要求的速度还慢,那就是迅雷、飞鸽传书等软件做的事情了。
|
其实将传输的速度显示即可,没有必要进行休眠!
|
发送2M休眠1s 再发送 哈哈 这法子挺笨的
|
我做得是用udp发包,但是不怎么稳定,只是想告诉你的是你定义一个 char[]把包的长度给定义成数组长度。然后随便给数组赋值,这样你发的时候每次的长度都一样。
memset(buf,'*',len);
for(i = 0;i
memset(buf,'*',len);
for(i = 0;i