#include
#include
#include
/* 要使用winsock api,就要包含ws2_32.lib這個庫 /
#pragma comment(lib, 「ws2_32.lib」)
int main(int argc, char ar**)
//為埠號賦值
short port;
if((port = atoi(ar**[1])) == 0)
/* 第一步:初始化(註冊)winsock.dll /
wsadata wsadata;
//init winsock.dll
if (wsastartup(makeword(1,1), &wsadata) != 0)
/ 第二步:建立監聽套接字 /
//creat socket
socket servsoc;
if ((servsoc = socket(af_inet, sock_stream, ipproto_tcp)) == invalid_socket)
/ 填寫一些伺服器的位址資訊(三元組) /
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(sockaddr_in));
servaddr.sin_family = af_inet;
servaddr.sin_port = htons(port);
servaddr.sin_addr.s_un.s_addr = htonl(inaddr_any);
/ 第三步:繫結位址到監聽套接字 /
//bind
if (bind(servsoc, (sockaddr)&servaddr, sizeof(servaddr)) == socket_error)
/* 第四步:開始監聽(最多允許2個客戶機連線) /
//listen
if (listen(servsoc, 2) == socket_error)
printf(「server %d is listening…\n」, port);
/ 建立連線套接字,負責和客戶端通訊
* 初始化客戶端位址資訊
/socket clientsoc;
struct sockaddr_in clientaddr;
memset(&clientaddr, 0, sizeof(clientaddr));
int addrlen = sizeof(clientaddr);
/ 第五步:接受客戶端的連線 /
//accept
if ((clientsoc = accept(servsoc, (sockaddr)&clientaddr, &addrlen)) == invalid_socket)
printf(「accept connection from %s\n」, inet_ntoa(clientaddr.sin_addr));
/* 第六步:資料互動 /
char buf[4096];
while (1)
buf[bytes] = 『\0』;
printf(「message from %s:%s\n」, inet_ntoa(clientaddr.sin_addr), buf);
if (send(clientsoc, buf, bytes, 0) == socket_error)
}/ 第七步:清除套接字,釋放該條連線所占用的全部資源 */
//clean socket
wsacleanup();
return 0;
}
Windows網路程式設計
1.先總結一些會用到的知識 中計算機都分配乙個位址,該位址是乙個 32位的數值表示 客戶端和伺服器通訊的時候需要指定乙個 ip位址 和埠。ip位址 一般是用 internet標準 點分表示法 像a.b.c.d 一樣指定 的,每乙個字母代表乙個位元組的數字 十進位制 八進位制 或十六進製制 從左到右分...
windows網路程式設計
winsock是windows系統下利用socket套接字進行網路程式設計的相關函式,是windows下的網路程式設計介面。winsock在常見的windows平台上有兩個主要的版本,即winsock1和winsock2。編寫與winsock1相容的程式你需要引用標頭檔案winsock.h,如果編寫...
Windows網路程式設計雜談
windows網路程式設計雜談 關於bind inaddr any 的具體含義是,繫結到0.0.0.0。此時,對所有的位址都將是有效的,如果系統考慮冗餘,採用多個網絡卡的話,那麼使用此種bind,將在所有網絡卡上進行繫結。在這種情況下,你可以收到傳送到所有有效位址上資料報。例如 sockaddr i...