多线程探测网络速度的疑难问题! (288分)

  • 主题发起人 主题发起人 ^nEWnEW^
  • 开始时间 开始时间
N

^nEWnEW^

Unregistered / Unconfirmed
GUEST, unregistred user!
我想做一个测试服务器响应速度的多线程探测器。不知下面的思路是否正确,请高手指教!

已经用ics的TPing做了一个,不过Ping需要ICMP协议,如果没有,行结果不正确。后来改变思路,准备用TClientSocket和服务器的某个端口建立连接,并记录时间。可是结果仍然不正确。一个线程没有问题,开16个线程同时建立连接,结果很多显示连接不上,或者是比正常的响应时间长好多。请问应该如何解决?总结问题如下:

问题一:TClientSocket和多线程
为什么结果会不正确?应该如何做?

问题二:不用控件了,直接用WinSock了
为什么结果有时快,有时慢?线程开的多了会不会影响测试结果的准确性?
 
控件俺用得不多,提不出具体意见,但对你问题中的多线程有点说法:
你通过在线程中创建“TIdIcmpClient对象”的做法,表示 TIdIcmpClient 不是多线程安全
的,才这样做。如果 TIdIcmpClient 是支持多线程的,就表示 3 个内容:
1.TIdIcmpClient 中使用的参数,是线程上下文相关的。
2.TIdIcmpClient 的执行方法里使用的变量,必然是自己单独的副本。
3.TIdIcmpClient 会有一个总控流程管理多个线程的执行,也就是说它是线程安全的。
其他的,俺就不知道了。
 
处理新连接对服务器来说是比较耗时的,测试网速最好在已建立的连接上发送数据然后服务器原样返回,取来回时间

你的问题恐怕是服务器程序逻辑的问题,服务器可能是
while(true)
{
accept(...)
}
这样同时连接肯定有问题,还是按我上面说的那样做吧
 
后退
顶部