⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitping.h

📁 C++Builder高级应用开发指南随书源码
💻 H
字号:
//---------------------------------------------------------------------------

#ifndef UnitPingH
#define UnitPingH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <winsock2.h>

#define ICMP_ECHO		8
#define ICMP_ECHOREPLY	        0

#define ICMP_MIN		8		//ICMP报头的最小字节数
#define MAXIPHEADER		60		//IP数据报的最大字节数
#define MAXNUM                  10              //定义发送的报文的次数数
// IP header
typedef struct tagIPHEADER {
	unsigned char h_len:4;		// length of the header
	unsigned char version:4;	// Version of IP
	unsigned char tos;		// Type of service
	unsigned short total_len;	// total length of the packet
        unsigned short ident;		// unique identifier
	unsigned short frag_and_flags;	// flags
	unsigned char  ttl;
	unsigned char proto;		// protocol (TCP, UDP etc)
	unsigned short checksum;	// IP checksum

	unsigned int sourceIP;
	unsigned int destIP;

} IPHEADER;
// ICMP header
typedef struct tagICMPHEADER
{
	BYTE i_type;
	BYTE i_code;
	USHORT i_cksum;
	USHORT i_id;
	USHORT i_seq;
	ULONG timestamp; //时间戳
} ICMPHEADER;
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
        TPanel *Panel1;
        TMemo *Memo1;
        TEdit *Edit1;
        TLabel *Label1;
        TLabel *Label2;
        TEdit *Edit2;
        TButton *Button1;
        TButton *Button2;
        TEdit *Edit3;
        TLabel *Label3;
        TTimer *Timer1;
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
        void __fastcall Timer1Timer(TObject *Sender);
private:
	SOCKET SockRaw;//Socket对象
        char* pICMPData;//指向ICMP数据缓冲区
        char* pRecvBuf;//指向接收数据缓冲区
        sockaddr_in saDest;//存储Ping的目的地址
        int PacketSize;//数据长度
        int SeqIndex;//报文序号
        int RecvPack;//接收到的报文数目

private:	// User declarations
        void Ping();
        void IniSocket();
        void Fill_ICMP_Data(char *pICMPData, int nDataSize);
        USHORT CheckSum(USHORT *DataBuffer, int Size);//校验和函数
        //数据解码函数
        bool Decode_Resp(char *Buffer, int Bytes, sockaddr_in *SocketFrom);
public:		// User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -