生活随笔
收集整理的這篇文章主要介紹了
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 简单实例的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。