Windows Socket编程
Windows下Socket编程主要包括以下几部分:
服务端
1、初始化Windows Socket库。
2、创建Socket。
3、绑定Socket。
4、监听。
5、Accept。
6、接收、发送数据。
客户端
1、初始化Windows Socket库。
2、创建Socket。
3、连接Socket。
4、接收、发送数据。
服务端每接收到一个客户端的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 <Windows.h>
4
5 using namespace std;
6
7 #define PORT 4000
8 #define IP_ADDRESS "192.168.1.145"
9
10 DWORD WINAPI ClientThread(LPVOID lpParameter)
11 {
12 SOCKET CientSocket = (SOCKET)lpParameter;
13 int Ret = 0;
14 char RecvBuffer[MAX_PATH];
15
16 while ( true )
17 {
18 memset(RecvBuffer, 0x00, sizeof(RecvBuffer));
19 Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0);
20 if ( Ret == 0 || Ret == SOCKET_ERROR )
21 {
22 cout<<"客户端退出!"<<endl;
23 break;
24 }
25 cout<<"接收到客户信息为:"<<RecvBuffer<<endl;
26 }
27
28 return 0;
29 }
30
31 int main(int argc, char* argv[])
32 {
33 WSADATA Ws;
34 SOCKET ServerSocket, CientSocket;
35 struct sockaddr_in LocalAddr, ClientAddr;
36 int Ret = 0;
37 int AddrLen = 0;
38 HANDLE hThread = NULL;
39
40 //Init Windows Socket
41 if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
42 {
43 cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
44 return -1;
45 }
46
47 //Create Socket
48 ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
49 if ( ServerSocket == INVALID_SOCKET )
50 {
51 cout<<"Create Socket Failed::"<<GetLastError()<<endl;
52 return -1;
53 }
54
55 LocalAddr.sin_family = AF_INET;
56 LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
57 LocalAddr.sin_port = htons(PORT);
58 memset(LocalAddr.sin_zero, 0x00, 8);
59
60 //Bind Socket
61 Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr));
62 if ( Ret != 0 )
63 {
64 cout<<"Bind Socket Failed::"<<GetLastError()<<endl;
65 return -1;
66 }
67
68 Ret = listen(ServerSocket, 10);
69 if ( Ret != 0 )
70 {
71 cout<<"listen Socket Failed::"<<GetLastError()<<endl;
72 return -1;
73 }
74
75 cout<<"服务端已经启动"<<endl;
76
77 while ( true )
78 {
79 AddrLen = sizeof(ClientAddr);
80 CientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen);
81 if ( CientSocket == INVALID_SOCKET )
82 {
83 cout<<"Accept Failed::"<<GetLastError()<<endl;
84 break;
85 }
86
87 cout<<"客户端连接::"<<inet_ntoa(ClientAddr.sin_addr)<<":"<<ClientAddr.sin_port<<endl;
88
89 hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)CientSocket, 0, NULL);
90 if ( hThread == NULL )
91 {
92 cout<<"Create Thread Failed!"<<endl;
93 break;
94 }
95
96 CloseHandle(hThread);
97 }
98
99 closesocket(ServerSocket);
100 closesocket(CientSocket);
101 WSACleanup();
102
103 return 0;
104 }
2 #include <iostream>
3 #include <Windows.h>
4
5 using namespace std;
6
7 #define PORT 4000
8 #define IP_ADDRESS "192.168.1.145"
9
10 DWORD WINAPI ClientThread(LPVOID lpParameter)
11 {
12 SOCKET CientSocket = (SOCKET)lpParameter;
13 int Ret = 0;
14 char RecvBuffer[MAX_PATH];
15
16 while ( true )
17 {
18 memset(RecvBuffer, 0x00, sizeof(RecvBuffer));
19 Ret = recv(CientSocket, RecvBuffer, MAX_PATH, 0);
20 if ( Ret == 0 || Ret == SOCKET_ERROR )
21 {
22 cout<<"客户端退出!"<<endl;
23 break;
24 }
25 cout<<"接收到客户信息为:"<<RecvBuffer<<endl;
26 }
27
28 return 0;
29 }
30
31 int main(int argc, char* argv[])
32 {
33 WSADATA Ws;
34 SOCKET ServerSocket, CientSocket;
35 struct sockaddr_in LocalAddr, ClientAddr;
36 int Ret = 0;
37 int AddrLen = 0;
38 HANDLE hThread = NULL;
39
40 //Init Windows Socket
41 if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
42 {
43 cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
44 return -1;
45 }
46
47 //Create Socket
48 ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
49 if ( ServerSocket == INVALID_SOCKET )
50 {
51 cout<<"Create Socket Failed::"<<GetLastError()<<endl;
52 return -1;
53 }
54
55 LocalAddr.sin_family = AF_INET;
56 LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
57 LocalAddr.sin_port = htons(PORT);
58 memset(LocalAddr.sin_zero, 0x00, 8);
59
60 //Bind Socket
61 Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr));
62 if ( Ret != 0 )
63 {
64 cout<<"Bind Socket Failed::"<<GetLastError()<<endl;
65 return -1;
66 }
67
68 Ret = listen(ServerSocket, 10);
69 if ( Ret != 0 )
70 {
71 cout<<"listen Socket Failed::"<<GetLastError()<<endl;
72 return -1;
73 }
74
75 cout<<"服务端已经启动"<<endl;
76
77 while ( true )
78 {
79 AddrLen = sizeof(ClientAddr);
80 CientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen);
81 if ( CientSocket == INVALID_SOCKET )
82 {
83 cout<<"Accept Failed::"<<GetLastError()<<endl;
84 break;
85 }
86
87 cout<<"客户端连接::"<<inet_ntoa(ClientAddr.sin_addr)<<":"<<ClientAddr.sin_port<<endl;
88
89 hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)CientSocket, 0, NULL);
90 if ( hThread == NULL )
91 {
92 cout<<"Create Thread Failed!"<<endl;
93 break;
94 }
95
96 CloseHandle(hThread);
97 }
98
99 closesocket(ServerSocket);
100 closesocket(CientSocket);
101 WSACleanup();
102
103 return 0;
104 }
1 //Client.cpp
2 #include <iostream>
3 #include <Windows.h>
4
5 using namespace std;
6
7 #define PORT 4000
8 #define IP_ADDRESS "192.168.1.145"
9
10
11 int main(int argc, char* argv[])
12 {
13 WSADATA Ws;
14 SOCKET CientSocket;
15 struct sockaddr_in ServerAddr;
16 int Ret = 0;
17 int AddrLen = 0;
18 HANDLE hThread = NULL;
19 char SendBuffer[MAX_PATH];
20
21 //Init Windows Socket
22 if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
23 {
24 cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
25 return -1;
26 }
27
28 //Create Socket
29 CientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
30 if ( CientSocket == 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(CientSocket,(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(CientSocket, 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(CientSocket);
64 WSACleanup();
65
66 return 0;
67 }
2 #include <iostream>
3 #include <Windows.h>
4
5 using namespace std;
6
7 #define PORT 4000
8 #define IP_ADDRESS "192.168.1.145"
9
10
11 int main(int argc, char* argv[])
12 {
13 WSADATA Ws;
14 SOCKET CientSocket;
15 struct sockaddr_in ServerAddr;
16 int Ret = 0;
17 int AddrLen = 0;
18 HANDLE hThread = NULL;
19 char SendBuffer[MAX_PATH];
20
21 //Init Windows Socket
22 if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
23 {
24 cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
25 return -1;
26 }
27
28 //Create Socket
29 CientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
30 if ( CientSocket == 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(CientSocket,(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(CientSocket, 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(CientSocket);
64 WSACleanup();
65
66 return 0;
67 }
Windows Socket编程
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步