windows socket程式設計入門示例2

2021-08-11 04:00:51 字數 3962 閱讀 1920

// tcpsocketserver.cpp

#include #include #include #pragma comment(lib,"ws2_32.lib")

#define ip_address "127.0.0.1"

#define port 5678

static dword winapi recvthread(void *param);

static dword winapi sendthread(void *param);

void main()

if (lobyte(wsadata.wversion) != 2 || hibyte(wsadata.wversion) != 2)

socketserver = socket(af_inet, sock_stream, 0);//建立套接字

if (socketserver == invalid_socket)

= htonl(inaddr_any);

addrsrv.sin_addr.s_un.s_addr = inet_addr(ip_address);

addrsrv.sin_family = af_inet;//將sin_family欄位設定為af_inet,代表winsock使用的是ip位址族

addrsrv.sin_port = htons(port);//埠號

retcode = bind(socketserver, (sockaddr*)&addrsrv, sizeof(sockaddr));//繫結套接字到乙個ip位址和乙個埠上

if (retcode == socket_error)

retcode = listen(socketserver, 2);//將套接字設定為監聽模式等待連線請求

if (retcode == socket_error)

printf("tcp server is running....\n");

while (1)

printf("接受到乙個連線:%s \r\n", inet_ntoa(addrclient.sin_addr));

clientsocketset.push_back(socketconnection);

//建立乙個子執行緒呼叫recvthread函式,專門用來接收訊息

handle recvthreadhandle = createthread(null, 0, recvthread, &socketconnection, 0, null);

if (recvthreadhandle == null)

threadhandleset.push_back(recvthreadhandle);

handle sendthreadhandle = createthread(null, 0, sendthread, &socketconnection, 0, null);

if (sendthreadhandle == null)

threadhandleset.push_back(sendthreadhandle);

} fprintf(stderr, "main thread to wait sub thread to finish.\n");

for (int i = 0; i < threadhandleset.size(); i++) }

for (int i = 0; i < clientsocketset.size(); i++)

closesocket(socketserver);

wsacleanup();//關閉載入的套接字型檔

}static dword winapi recvthread(void *param)

else if (ret == 0 || (ret == socket_error && wsagetlasterror() == wsaeconnreset))

else if (ret == socket_error && wsagetlasterror() == wsaewouldblock)

}fprintf(stderr, "接收資料子執行緒退出\n");

return 0;

}static dword winapi sendthread(void *param)

retcode = send(socketconnection, sendbuf, length, 0);

if (retcode == socket_error && wsagetlasterror() == wsaeconnreset)

else if (retcode == socket_error)

if (retcode != socket_error)

}fprintf(stderr, "傳送資料子執行緒退出\n");

return 0;

}// tcpsocketclient.cpp

#include #include #pragma comment(lib,"ws2_32.lib")

#define ip_address "127.0.0.1"

#define port 5678

static dword winapi recvthread(void *param);

void main( )

if (lobyte(wsadata.wversion) != 2 || hibyte(wsadata.wversion) != 2)

socketclient = socket(af_inet, sock_stream, 0);

if (socketclient == invalid_socket)

addrsrv.sin_addr.s_un.s_addr = inet_addr(ip_address);//ip位址

addrsrv.sin_family = af_inet; //將sin_family欄位設定為af_inet,代表winsock使用的是ip位址族

addrsrv.sin_port = htons(port); //埠號

//向伺服器端發出連線請求

retcode = connect(socketclient, (sockaddr*)&addrsrv, sizeof(sockaddr));

if (retcode == socket_error)

//建立子執行緒呼叫recvthread函式,專門用來接收伺服器端發過來的訊息

handle recvdatathreadhandle = createthread(null, 0, recvthread, &socketclient, 0, null);

if (recvdatathreadhandle == null)

fprintf(stderr, "create recive data thread failed!\n");

//傳送訊息在主線程當中實現

while (1)

retcode = send(socketclient, sendbuf, strlen(sendbuf) + 1, 0);//傳送訊息

if (retcode == socket_error && wsagetlasterror() == wsaeconnreset)

else if (retcode == socket_error)

if (retcode != socket_error)

}if (recvdatathreadhandle)

closesocket(socketclient);

wsacleanup();//關閉載入的套接字型檔

}static dword winapi recvthread(void *param)

else if (ret == 0 || (ret == socket_error && wsagetlasterror() == wsaeconnreset))

else if (ret == socket_error && wsagetlasterror() == wsaewouldblock)

}return 0;

}

Windows Socket 程式設計

伺服器端 客戶端 在 http fayaa.com code 處理的高亮顯示效果 c 語言 臨時自用 include include void main if lobyte wsadata wversion 1 hibyte wsadata wversion 1 socket socksrv soc...

Windows Socket程式設計

windows下socket程式設計主要包括以下幾部分 服務端1 初始化windows socket庫。2 建立socket。3 繫結socket。4 監聽。5 accept。6 接收 傳送資料。客戶端1 初始化windows socket庫。2 建立socket。3 連線socket。4 接收 傳...

Windows Socket程式設計

1 初始化windows socket庫。2 建立socket。3 繫結socket。4 監聽。5 accept。6 接收 傳送資料。1 初始化windows socket庫。2 建立socket。3 連線socket。4 接收 傳送資料。服務端每接收到乙個客戶端的socket,則建立乙個執行緒。滿...