關於winsock使用的問題 |
尚未結案
|
tohow
一般會員 發表:2 回覆:0 積分:0 註冊:2009-06-01 發送簡訊給我 |
原由是想寫一支PING功能的程式,在VC6 CONSOL MODE環境下,
在網路上參考到某位大大的程式, 但是發現到單獨要CREATE SOCKET就有問題, 不知道有沒有大大可以幫我解決的呢!? 謝謝! [code cpp] #include #include typedef struct _ICMPHeader { unsigned char icmp_type; unsigned char icmp_code; unsigned short icmp_checksum; unsigned short icmp_id; unsigned short icmp_sequence; unsigned int icmp_timestamp; } ICMPHeader; USHORT checksum(USHORT *buff, int size) { u_char *buf1=(u_char*)buff; register int cksum = 0; while(size>1) { cksum = *buff ; size -=2; } if(size==1) cksum = *(UCHAR*)buff; cksum = (cksum >> 16) (cksum & 0xffff); cksum = (cksum >> 16); return ((USHORT)~cksum); } void main() { unsigned char *ip="127.0.0.1"; int nRet; ICMPHeader *pIcmp; char buff[sizeof(ICMPHeader) 5]; SOCKET S; SOCKADDR_IN dest; USHORT nSeq = 0; //unsigned char B[4]; S = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); if (S == INVALID_SOCKET) { printf("create socket error\n"); } dest.sin_family = AF_INET; dest.sin_port = htons(0); dest.sin_addr.S_un.S_addr = inet_addr(ip); pIcmp = (ICMPHeader*)buff; pIcmp->icmp_type = 8; pIcmp->icmp_code = 0; pIcmp->icmp_id = (unsigned short)GetCurrentProcessId(); pIcmp->icmp_checksum = 0; pIcmp->icmp_sequence = nSeq ; pIcmp->icmp_timestamp = GetTickCount(); memset(&buff[sizeof(ICMPHeader)], '0', 5); pIcmp->icmp_checksum = checksum((USHORT*)buff, sizeof(ICMPHeader) 5 ); nRet = sendto(S, buff,sizeof(ICMPHeader) 5, 0, (SOCKADDR *)&dest, sizeof(dest)); printf("return value = %d\n", nRet); } [/code] |
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
Ktop_Robot
站務副站長 發表:0 回覆:3511 積分:0 註冊:2007-04-17 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |