Idicmpclient支持多线程吗(200分)

  • 主题发起人 主题发起人 重庆森林
  • 开始时间 开始时间

重庆森林

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个小程序来实现管理多个ping的操作,具体是每ping一个地址就创建一个线程,在线程的execute里面创建一个idicmpclient的实例来实现ping的功能。并且在onreply里面处理返回的结果并给线程里的相关public变量赋值。主程序定时通过访问选定线程的public变量来得到结果。
问题是
1。如果ping的地址是ping不通的(time out),我按rstimeout统计到的丢包数有时候跟发包数一样,有时候要少,情况出现是不确定的。
2。能够ping通的情况下,延时有时候不正常。
看了一下idicmpclient的源文件,文件头上的注释说要修改才能支持多线程的ping操作,研究了半天也不知道该怎么改才行。
如果不行的话用icmp.dll支持多线程吗?
 
我认为没有必要用多线程来做这个,你可以用多个线程来发包,但是必须只用
一个线程来接受数据,最好是用原始套接字来做,这样容易控制的多
 
开始是想用现成的东西做没想到会有这种问题,现在换几乎就要重写了,现在关键是怎么改才能解决这些问题。
如果用多个发一个收的话,能够保证数据都得到及时处理吗?我对返回值的处理有点多。
 
这是由于ICMP协议决定的,他没有端口的处理,也就是都是0端口,所以你哪个线程
发出的包其他的线程都可以收到,这样就无法区分是哪个IP返回包,你就不能处理了
所以我建议用一个线程来接受包,在这个线程里判断就行了,
最后我建议你如果想做的专业一些,就用原始套接字用API写,或者修改Indy的代码,
这样好一些
 
可是统计丢包的问题在只有一个线程的时候也有发生。
我的问题就是该怎么修改indy的代码.[:)]
 
我也没用过INDY的哪个控件,我自己的用API写的,
其实你不一定要多线程,很多时候单线程比多线程速度要看一些
 
问题已经解决了,不过不是改indy的代码,而是不用indy。
问题再放几天吧,希望能有人知道该怎么改。
 
接受答案了.
 
后退
顶部