icmphdr->seq << ", "; if (icmphdr->type == ICMP_TTL_EXPIRE) { cout << "TTL expired." << endl; } else { cout << nHops << " hop" << (nHops == 1 ? "" : "s"); cout << ", time: " << (GetTickCount() - icmphdr->timestamp) << " ms." << endl; }
return 0; }
总结和建议: ----------- bugfree建议其中的这些方面需要改进: 1. 头文件iostream.h 改为 iostream, 后者是标准C++的头文件 同时添加对std::cout 和 std::endl;的引用 对于cerr 建议都改为std::cout(因为后者头文件不支持) 2. 程序的发送和接受采用了同步的方式, 这使得如果出现网络问题recv_ping将陷入持续等待. 这是我们不想看到的. 这三种技术可以达到目的: - 使用多线程, 将ping封装进线程, 在主程序中对它的超时进行处理 - 使用select()函数来实现 - 使用windows的 WSAAsyncSelect() 这里对这些方法不作具体讨论, 留给读者自已完成.
(出处:清风网络学院)
上一篇:全面分享:网络协议标准规范大全一
下一篇:透析ICMP协议(三): 应用篇ping(ICMP.dll)
|