日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows socket 简单实例

發布時間:2023/12/9 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows socket 简单实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Windows下Socket編程主要包括以下幾部分:
服務端
?? 1、初始化Windows Socket庫。
?? 2、創建Socket。
?? 3、綁定Socket。
?? 4、監聽。
?? 5、Accept。
?? 6、接收、發送數據。

客戶端
?? 1、初始化Windows Socket庫。
?? 2、創建Socket。
?? 3、連接Socket。
?? 4、接收、發送數據。

服務端每接收到一個客戶端的Socket,則創建一個線程。滿足一個服務端連接多個客戶端。

1 //Server.cpp 2 #include <iostream> 3 #include <winsock2.h> 4 5 using namespace std; 6 7 #pragma comment(lib, "ws2_32.lib") 8 9 #define PORT 4000 10 #define IP_ADDRESS "10.241.39.19" 11 12 13 DWORD WINAPI ClientThread(LPVOID lpParameter) 14 { 15 SOCKET CientSocket = (SOCKET)lpParameter; 16 int Ret = 0; 17 char RecvBuffer[MAX_PATH]; 18 19 while ( true ) 20 { 21 memset(RecvBuffer, 0x00, sizeof(RecvBuffer)); 22 Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0); 23 if ( Ret == 0 || Ret == SOCKET_ERROR ) 24 { 25 cout<<"客戶端退出!"<<endl; 26 break; 27 } 28 cout<<"接收到客戶信息為:"<<RecvBuffer<<endl; 29 } 30 31 return 0; 32 } 33 34 int main(int argc, char* argv[]) 35 { 36 WSADATA Ws; 37 SOCKET ServerSocket, ClientSocket; 38 struct sockaddr_in LocalAddr, ClientAddr; 39 int Ret = 0; 40 int AddrLen = 0; 41 HANDLE hThread = NULL; 42 43 //Init Windows Socket 44 if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) 45 { 46 cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl; 47 return -1; 48 } 49 50 //Create Socket 51 ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 52 if ( ServerSocket == INVALID_SOCKET ) 53 { 54 cout<<"Create Socket Failed::"<<GetLastError()<<endl; 55 return -1; 56 } 57 58 LocalAddr.sin_family = AF_INET; 59 LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); 60 LocalAddr.sin_port = htons(PORT); 61 memset(LocalAddr.sin_zero, 0x00, 8); 62 63 //Bind Socket 64 Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr)); 65 if ( Ret != 0 ) 66 { 67 cout<<"Bind Socket Failed::"<<GetLastError()<<endl; 68 return -1; 69 } 70 //listen 71 Ret = listen(ServerSocket, 10); 72 if ( Ret != 0 ) 73 { 74 cout<<"listen Socket Failed::"<<GetLastError()<<endl; 75 return -1; 76 } 77 78 cout<<"服務端已經啟動"<<endl; 79 80 while ( true ) 81 { 82 AddrLen = sizeof(ClientAddr); 83 ClientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen); 84 if ( ClientSocket == INVALID_SOCKET ) 85 { 86 cout<<"Accept Failed::"<<GetLastError()<<endl; 87 break; 88 } 89 90 cout<<"客戶端連接::"<<inet_ntoa(ClientAddr.sin_addr)<<":"<<ClientAddr.sin_port<<endl; 91 92 hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)ClientSocket, 0, NULL); 93 if ( hThread == NULL ) 94 { 95 cout<<"Create Thread Failed!"<<endl; 96 break; 97 } 98 99 CloseHandle(hThread); 100 } 101 102 closesocket(ServerSocket); 103 closesocket(ClientSocket); 104 WSACleanup(); 105 106 return 0; 107 } 1 // Client.cpp 2 #include <iostream> 3 #include <winsock2.h> 4 5 using namespace std; 6 7 #pragma comment(lib, "ws2_32.lib") 8 9 #define PORT 4000 10 #define IP_ADDRESS "10.241.39.19" 11 12 int main(int argc, char * argv[]) 13 { 14 WSADATA Ws; 15 SOCKET ClientSocket; 16 struct sockaddr_in ServerAddr; 17 int Ret = 0; 18 int AddrLen = 0; 19 HANDLE hThread = NULL; 20 char SendBuffer[MAX_PATH]; 21 22 //Init Windows Socket 23 if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ) 24 { 25 cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl; 26 return -1; 27 } 28 //Create Socket 29 ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 30 if ( ClientSocket == INVALID_SOCKET ) 31 { 32 cout<<"Create Socket Failed::"<<GetLastError()<<endl; 33 return -1; 34 } 35 36 ServerAddr.sin_family = AF_INET; 37 ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); 38 ServerAddr.sin_port = htons(PORT); 39 memset(ServerAddr.sin_zero, 0x00, 8); 40 41 Ret = connect(ClientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr)); 42 if ( Ret == SOCKET_ERROR ) 43 { 44 cout<<"Connect Error::"<<GetLastError()<<endl; 45 return -1; 46 } 47 else 48 { 49 cout<<"連接成功!"<<endl; 50 } 51 52 while ( true ) 53 { 54 cin.getline(SendBuffer, sizeof(SendBuffer)); 55 Ret = send(ClientSocket, SendBuffer, (int)strlen(SendBuffer), 0); 56 if ( Ret == SOCKET_ERROR ) 57 { 58 cout<<"Send Info Error::"<<GetLastError()<<endl; 59 break; 60 } 61 } 62 63 closesocket(ClientSocket); 64 WSACleanup(); 65 66 return 0; 67 }

?

?

轉載于:https://www.cnblogs.com/xubin0523/archive/2012/09/11/2679851.html

總結

以上是生活随笔為你收集整理的windows socket 简单实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。