1、自己写的ping的time和windows自带ping出来的time值差异很大,time是由GetTickCount在初始化ICMP报头时计算的;数量级的差异2、对于超时的目标主机,我的程序就停在recvfrom里了,不会返回SOCKET_ERROR;3、TTL(1~255)值是如何计算出来的呢?ping不同的主机得到的不同啊
解决方案 »
- UpdateLayeredWindow指定对话框窗口全部半透明//是否有指定对话框某区域窗口半透明呢???
- c#中Windows如何向service发消息?最好可以使用SendMessage
- 创建类的低级问题,麻烦讲解一下
- 请问怎么把一个正常的串口收发变成多线程的
- 请问:如何用程序删除一个*.ini文件?如何检出一个*.ini文件的存在?
- 急!!如何获取当前连接的显示器数目?
- 接口中怎么传递一个枚举数组??
- 一个想法可不可以实现,各位帮助参谋一下。请给予回复
- CPropertySheet的问题
- 一个在vista下格式化得问题
- 为什么创建多个位图对像然后再onpaint中不断bitbit为导致程序崩溃!
- 关于ListCtrl焦点的问题
看如下命令
D:Documents and Settingshx>ping 61.152.93.131 Pinging 61.152.93.131 with 32 bytes of data: Reply from 61.152.93.131: bytes=32 time=21ms TTL=118
Reply from 61.152.93.131: bytes=32 time=19ms TTL=118
Reply from 61.152.93.131: bytes=32 time=18ms TTL=118
Reply from 61.152.93.131: bytes=32 time=22ms TTL=118 Ping statistics for 61.152.93.131:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss
Approximate round trip times in milli-seconds:
Minimum = 18ms, Maximum = 22ms, Average = 20ms D:Documents and Settingshx>ping 61.152.104.40 Pinging 61.152.104.40 with 32 bytes of data: Reply from 61.152.104.40: bytes=32 time=28ms TTL=54
Reply from 61.152.104.40: bytes=32 time=18ms TTL=54
Reply from 61.152.104.40: bytes=32 time=18ms TTL=54
Reply from 61.152.104.40: bytes=32 time=13ms TTL=54 Ping statistics for 61.152.104.40:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss
Approximate round trip times in milli-seconds:
Minimum = 13ms, Maximum = 28ms, Average = 19ms
第一台TTL为118,则基本可以判断这是一台Windows机器,从我的机器到这台机器经过了10个节点,因为128-118=10。而第二台应该是台Linux,理由一样64-54=10。
你说ping时间的不同可以放在sendto后面,晚上回去我试试;
对于超时的目标主机,recvfrom应该返回错误的结果不是吗?我没有创建其他线程,主线程会一直等候下去吗?msdn里面不是说了会返回error吗,总觉得有点不是很理解
2。是否设置了超时
3.ICMP报文中有这个域
#include "windows.h"
#include "winsock2.h"VOID CALLBACK TimeProc(...)
DWORD WINAPI subThread(...)void main()
{....
CreateThread(...,subThread,....)
...
}DWORD WINAPI subThread(...)
{
settimer( ...,5000,TimePorc,...)
recvfrom(...)//receive datagram
}
VOID CALLBACK TimeProc(...)
{
//这个地方是否该加点判断recvfrom返回语句?但是我的recvfrom就sleep那了阿,无返回,可以 没有的话,如果对于能收到数据包的主机来说,隔5000ms后,仍然会显示“time out”?
cout<<"time out"<<endl;
}还有,如果对一个ip只发送一次包,接收一个包的话,会不会出现丢包的可能,那么发送多少次呢?另外,假如对于要ping很多主机来说,考虑多线程,我这样策略是否合适:只创建一个套接字,对所有ip循环sendto数据包,然后对每个ip创建一个线程,利用互斥进行同步,分别接受,再对recvfrom结果分别判断。