#define _WINSOCK_DEPRECATED_NO_WARNINGS する#include <iostreamの> の#include <winsock2.h> 使用して名前空間をSTD。#pragmaコメント(LIB、 "WS2_32.LIB")の#define PORT 7210 の#define IP_ADDRESS "192.168.0.103" の#define MAX_LINE 10000 DWORD WINAPI ClientThread(LPVOID lpParameter) { 構造体のsockaddr_in CLIENTADDR。 INT addrlenは= はsizeof (CLIENTADDR)。 SOCKET CientSocket = (SOCKET)lpParameter。 int型 iResult = 0 ; CHAR RecvBuffer [MAX_LINE]。 一方、(真) { memsetの(RecvBuffer、0x00で、はsizeof (RecvBuffer))。 iResult = RECV(CientSocket、RecvBuffer、MAX_LINE、0 ); getpeername(CientSocket、(構造体のsockaddr *)&CLIENTADDR、&addrlenは); もし(iResult == 0 || iResult == SOCKET_ERROR) { COUT << " 客户" << INET_NTOA(ClientAddr.sin_addr)<< " :" << ClientAddr.sin_port <<" 出口" << てendl; // クライアント終了 BREAK ; } // 情報サーバは、出力の受け取り はcout << " クライアント" << << INET_NTOA(ClientAddr.sin_addrを)" :" << ClientAddr.sin_portを< < " と彼は言う:" << recvbuffer << てendl; iResult =センド(CientSocket、recvbuffer、(int型)はstrlen(recvbuffer)、0 ); // クライアントに受信した文字列のバック } を返す 0 ; } INTメイン(INTARGC、CHAR * ARGV []) { WSADATA WSADATA。 SOCKET ServerSocketを、ClientSocket。 構造体LocalAddrは、CLIENTADDRのsockaddr_in。 int型 iReuslt = 0 ; int型 addrlenは= 0 ; HANDLE hThread = NULL; // 初期のWindowsソケット の場合(WSAStartupの(MAKEWORD(2、2)、&WSADATA)=!0 ) { coutの << " 初期のWindowsソケットに失敗しました:: " << WSAGetLastError()<< てendl; WSACleanup(); のinet_addr(IP_ADDRESS)。リターン - 1 。 } // ソケット作成 のServerSocket = ソケット(AF_INET、SOCK_STREAM、IPPROTO_TCP)。 もし(ServerSocketを== INVALID_SOCKET) { COUT << " 创建ソケット失败:: " << WSAGetLastError()<< ENDL。 closesocket(ServerSocketを) WSACleanup(); リターン - 1 。 } LocalAddr.sin_family = AF_INET。 LocalAddr.sin_addr.s_addr = LocalAddr.sin_port = htons(PORT)。 memset(LocalAddr.sin_zero、0x00の、8 )。 // バインドソケット iReuslt =バインド(ServerSocketを、(構造体のsockaddr *)&LocalAddrは、はsizeof (LocalAddrは)); もし(!iReuslt = 0 ) { coutの << " バインドソケットは失敗しました:: " << WSAGetLastError()<< てendl; WSACleanup(); リターン - 1 。 } // 聞く iReusltを聞く=(のServerSocketを10 )。 もし(iReuslt!= 0 ) { 裁判所未満 << " 待機ソケットに失敗しました:: " << WSAGetLastError()<< てendl; リターン - 1 。 } COUT << " 服务端已经启动" << ENDL。 一方、(真) { addrlenは = はsizeof (CLIENTADDR)。 ClientSocket =受け入れる(ServerSocketを、(構造体のsockaddr *)&CLIENTADDR、&addrlenは)。 もし(ClientSocket == INVALID_SOCKET) { 裁判所未満 << " 受け入れに失敗しました:: " << WSAGetLastError()<< てendl; 休憩; } COUT << " 客户端连接:: " << INET_NTOA(ClientAddr.sin_addr)<< " :" << ClientAddr.sin_port << ENDL。 hThread =のCreateThread(NULL、0、ClientThread、(LPVOID)ClientSocket、0 、NULL); もし(hThread == NULL) { COUT << " 失敗したスレッドを作成しよう!"<< てendl; } CloseHandleを(hThread)。 } closesocket(ServerSocketを) closesocket(ClientSocket)。 WSACleanup(); リターン 0 ; }