前两天写了个小程序,现在给大家分享一下.这个是用c/c++加上原始套接字写的一个ping命令,ping命令的原理想必我不用多说了,了解ICMP协议的朋友们都知道的..
该程序分几个文件:
初始化socket的类:InitSocket.h
/**/
/* winsock应用程序必须加载Winsock Dll
* 加载该Dll的函数就是::WSAStartup()
* 使用结束后还得释放Dll 用::WSACleanup()函数可以实现
*/
#ifndef _INITSOCKET_H_
#define _INITSOCKET_H_
#include < winsock2.h >
#include < Mswsock.h >
#pragma comment(lib, "WS2_32")
class CInitSocket
... {
public:
CInitSocket(BYTE minorVer = 2, BYTE majorVer = 2)
...{
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if (::WSAStartup(sockVersion, &wsaData) != 0)
...{
return;
}
}
~CInitSocket()
...{
::WSACleanup();
}
} ;
#endif // _INITSOCKET_H_
子函数头文件HdFuns.h
#ifndef _HDFUNS_H_
#define _HDFUNS_H_
#include " InitSocket.h "
USHORT CheckSum(USHORT * buffer, int size);
BOOL SetTimeout(SOCKET s, int nTime, BOOL bRecv);
#endif // _HDFUNS_H_
子函数实现文件:HdFuns.cpp
#include " HdFuns.h "
#include " Ws2tcpip.h "
#include <
* 加载该Dll的函数就是::WSAStartup()
* 使用结束后还得释放Dll 用::WSACleanup()函数可以实现
*/
#ifndef _INITSOCKET_H_
#define _INITSOCKET_H_
#include < winsock2.h >
#include < Mswsock.h >
#pragma comment(lib, "WS2_32")
class CInitSocket
... {
public:
CInitSocket(BYTE minorVer = 2, BYTE majorVer = 2)
...{
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if (::WSAStartup(sockVersion, &wsaData) != 0)
...{
return;
}
}
~CInitSocket()
...{
::WSACleanup();
}
} ;
#endif // _INITSOCKET_H_
子函数头文件HdFuns.h
#ifndef _HDFUNS_H_
#define _HDFUNS_H_
#include " InitSocket.h "
USHORT CheckSum(USHORT * buffer, int size);
BOOL SetTimeout(SOCKET s, int nTime, BOOL bRecv);
#endif // _HDFUNS_H_
子函数实现文件:HdFuns.cpp
#include " HdFuns.h "
#include " Ws2tcpip.h "
#include <