服务端
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编程