windows網路程式設計

2021-10-06 21:10:34 字數 1799 閱讀 9248

#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...