您的当前位置:首页正文

计算机网络 (2)

2022-08-14 来源:步旅网
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 3 #include 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<<\"客户端退出!\"<25 cout<<\"接收到客户信息为:\"<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::\"<47 //Create Socket

48 ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 49 if ( ServerSocket == INVALID_SOCKET ) 50 {

51 cout<<\"Create Socket Failed::\"<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::\"<68 Ret = listen(ServerSocket, 10); 69 if ( Ret != 0 ) 70 {

71 cout<<\"listen Socket Failed::\"<75 cout<<\"服务端已经启动 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::\"<cout<<\"

\"<接::\"<89 hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)CientSocket, 0, NULL);

90 if ( hThread == NULL ) 91 {

92 cout<<\"Create Thread Failed!\"<96 CloseHandle(hThread); 97 } 98

99 closesocket(ServerSocket); 100 closesocket(CientSocket); 101 WSACleanup(); 102

103 return 0; 104 }

1 //Client.cpp

2 #include 3 #include 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::\"<28 //Create Socket

29 CientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 30 if ( CientSocket == INVALID_SOCKET ) 31 {

32 cout<<\"Create Socket Failed::\"<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::\"<47 else 48 {

49 cout<<\"连接成功!\"<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::\"<63 closesocket(CientSocket); 64 WSACleanup(); 65

66 return 0; 67 }

因篇幅问题不能全部显示,请点此查看更多更全内容