全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1671
推到 Plurk!
推到 Facebook!

關於winsock使用的問題

尚未結案
tohow
一般會員


發表:2
回覆:0
積分:0
註冊:2009-06-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-13 11:49:13 IP:218.170.xxx.xxx 訂閱
原由是想寫一支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]
編輯記錄
tohow 重新編輯於 2009-08-13 11:50:52, 註解 無‧
tohow 重新編輯於 2009-08-13 11:54:52, 註解 無‧
tohow 重新編輯於 2009-08-13 11:55:24, 註解 無‧
tohow 重新編輯於 2009-08-13 11:56:30, 註解 無‧
tohow 重新編輯於 2009-08-13 12:01:01, 註解 無‧
tohow 重新編輯於 2009-08-13 13:03:51, 註解 無‧
tohow 重新編輯於 2009-08-13 13:05:18, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-08-27 16:41:53 IP:163.28.xxx.xxx 訂閱
請加上

[code cpp]
int status;
WSADATA Data;

/* initialize the Windows Socket DLL */
status=WSAStartup(MAKEWORD(1, 1), &Data);
if (status != 0)
{
printf("ERROR: WSAStartup unsuccessful\n");

}
[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-08-29 22:58:28 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2017-12-16 13:21:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!