采用以下网页提供的ping的方法:
http://www.pcbookcn.com/article/1121.htm
已经可以实现ping单个主机了,(winsock2.h)
现在打算使用多线程的方法来同时ping多台主机,在实现时并不能达到预期的效果,
不知是什么原因,望赐教,谢谢!
多线程的代码如下:char ip1[16] = "192.168.1.1";
char ip2[16] = "192.168.1.2"
int i = 0;for(i=1; i<=2; i++)
{
AfxBeginThread(DoPing, (LPVOID)i);
Sleep(500);
}UINT DoPing(LPVOID pParam)
{
int locali = 0;
int ret = 0;
char strIP[16];
locali = (int)pParam;
if(locali == 1)
{
strcpy(strIP, ip1)
}
else if(locali == 2)
{
strcpy(strIP, ip1)
}
else
return 1;
ret = ping(strIP);
if(ret < 0)
printf("fail to ping host: %s\n", strIP);
else
printf("success to ping host: %s\n", strIP);
return 0;
}现象为:
如果单独ping ip1,那么可以ping通;
如果单独ping ip2,那么无法ping通;
但使用多线程来ping时,返回的结果是都能ping通,为什么会这样呢?
http://www.pcbookcn.com/article/1121.htm
已经可以实现ping单个主机了,(winsock2.h)
现在打算使用多线程的方法来同时ping多台主机,在实现时并不能达到预期的效果,
不知是什么原因,望赐教,谢谢!
多线程的代码如下:char ip1[16] = "192.168.1.1";
char ip2[16] = "192.168.1.2"
int i = 0;for(i=1; i<=2; i++)
{
AfxBeginThread(DoPing, (LPVOID)i);
Sleep(500);
}UINT DoPing(LPVOID pParam)
{
int locali = 0;
int ret = 0;
char strIP[16];
locali = (int)pParam;
if(locali == 1)
{
strcpy(strIP, ip1)
}
else if(locali == 2)
{
strcpy(strIP, ip1)
}
else
return 1;
ret = ping(strIP);
if(ret < 0)
printf("fail to ping host: %s\n", strIP);
else
printf("success to ping host: %s\n", strIP);
return 0;
}现象为:
如果单独ping ip1,那么可以ping通;
如果单独ping ip2,那么无法ping通;
但使用多线程来ping时,返回的结果是都能ping通,为什么会这样呢?
因为多线程都用一个进程号,当程序执行完后,返回给这个进程号的数据包.
因为都是同一个进程号,每个线程都接受到了这些返回的包,然后被处理成都PING通了.
只能采用多进程了?如果使用用户界面的多线程呢?
{
1、接收回应包
2、比较IP
3、if(IP == 本线程ping出去的IP)
//ping 通;
else
continue;
}
//ping不通
感兴趣的也可以参考这篇文章:
http://community.csdn.net/Expert/topic/3306/3306811.xml?temp=.4610712
这里也有Caps77的答复,在此,先表示感谢!
根据回复的包来确定能否ping通远程主机。
但返回的包是否会混在一起呢?如果会,那么在解析包时就比较麻烦了。