Delphi7環境,實作ping原理,這個代碼以C代碼居多,但是在D7下,會出現sendto是成功的,recvfrom接收到的內容是錯誤的,注意是內容錯誤,不是接收不到,代碼大致如下:
// 創建原始套節字
WSAStartup(MakeWord(2,2), SData);
sRaw := socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
// 設定目的地址
dest.sin_family := AF_INET;
dest.sin_port := htons(0);
dest.sin_addr.S_addr := inet_addr('192.168.10.1');
// 創建ICMP封包
picmp :=PICMP_HDR(@Buf);
// 填寫ICMP封包資料
picmp^.icmp_type := 8; // 請求一個ICMP回顯
picmp^.icmp_code := 0;
picmp^.icmp_id := GetCurrentProcessId();
picmp^.icmp_checksum := 0;
picmp^.icmp_sequence := 0;
picmp^.icmp_timestamp := GetTickCount();
picmp^.icmp_checksum := checksum(PWORD(@Buf), sizeof(Buf));
nRet := sendto(sRaw, Buf, sizeof(Buf), 0,dest, sizeof(dest));//這里是完全成功了,用wireshark抓包得知
nLen :=sizeof(from);
nRet := recvfrom(sRaw, recvBuf, sizeof(recvBuf), 0, from, nLen);//這里的recvBuf內容簡直就是混亂,用wireshark抓包得知
recvfrom執行成功,但是recvfrom內容完全混亂,源地址和目標地址完全顛倒了,from引數的IP地址居然不是192.168.10.1,而是本機地址!求解!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/91755.html
標籤:網絡通信/分布式開發
