クライアント
// IP地址端口 (ソケットINIT CONST のchar *のポートu_short IP){ WSADATA WD。 INT RET = WSAStartupの(MAKEWORD(2、2)、およびWD); もし(!RET = 0 ){ coutの << " WSAStartupのエラー... " << てendl; リターンINVALID_SOCKET。 } coutの << " WSAStartupを成功... " << てendl; // 创建套接字 SOCKETのSKT = ソケット(AF_INET、SOCK_STREAM、IPPROTO_TCP)。 IF(SKT == SOCKET_ERRORのである){ COUT << " ソケットエラー... " << ENDL; 戻りINVALID_SOCKETであり; } COUT << " ソケット成功... " << ENDL; // サーバ情報 のsockaddr_in addrServ; addrServ。 sin_familyは = AF_INET; // IPV4プロトコル addrServ.sin_portはhtons(ポート)=; // ポート addrServ.sin_addr.s_addrのinet_addr =(IP); // IPアドレスが // サーバーへの接続 のIF((SKT、(のsockaddr *)&addrServ接続、sizeof(addrServ))== SOCKET_ERROR){ COUT << " エラーを接続... " << ENDL。 戻る - 1 。 } coutの << " 成功を接続... " << てendl; リターンSKT; } ボイドは、(ソケットSKT){破壊 closesocket(SKT)を、 WSACleanup(); } ボイドprintMenu(){ のprintf(" ************************* \ n " ); printf(" *のgetName * \ n個" ); のprintf(" * getAge * \ N- " ); のprintf(" *の終了* \ N- " ); のprintf(" ********************** *** \ N- " ); } // サーバによって送信されたコマンド受付メッセージ送信クライアントのソケット・クライアント・コード のint function06を(){ SOCKET sktCliは、 INIT(= " 192.168.3.18 」、8080 ); IF(sktCli == INVALID_SOCKETです) { リターン - 1 ; } ながら(真の){ printMenu(); チャー szCmd [ 64 ] = { 0 }。 scanf関数(" %sの" 、szCmd)。 もし(のstrcmp(szCmd、" 出口")== 0 ){ のprintf(" [クライアント]出口... \ n " ); 破ります; } 送る(sktCli、szCmd、strlenを(szCmd) + 1、0 ); チャー szRecv [ 1024 ] = { 0 }。 int型 RET =のrecv(sktCli、szRecv、sizeof(szRecv)、0 ); もし(RET <= 0 ){ のprintf(" [クライアント]サーバ出口... \ n " ); 破ります; } のprintf(" [サーバ]メッセージ:%Sの\ n " 、szRecv)。 } (sktCli)を破壊します。 リターン 0 ; }
サーバ
// 初始化 SOCKETのINIT(CONST のchar *のポートu_short IP){ WSADATA WD。 INT RET = WSAStartupの(MAKEWORD(2、2)、およびWD); もし(!RET = 0 ){ coutの << " WSAStartupのエラー... " << てendl; 戻る - 1 。 } coutの << " WSAStartupを成功... " << てendl; // 创建套接字 SOCKET SKT =ソケット(AF_INET、SOCK_STREAM、IPPROTO_TCPが行く); IF(SKTは== {INVALID_SOCKETがある) COUT << " ソケットエラー... " << ;てendl 復帰 - 1。; } COUT << " ソケット成功... " << てendl; // サーバ情報 のsockaddr_in addrServ; addrServ.sin_family = AF_INET; addrServ.sin_port = htons(ポート); addrServ.sin_addr.s_addr = のinet_addr(IP); // ソケットポートとIPをバインド のIF(バインド(SKT、(のsockaddr *)&addrServ、はsizeof(addrServ))== SOCKET_ERROR){ coutの << " バインドエラー... " << てendl; 戻る - 1 。 } coutの << " バインド成功... " << てendl; // 开始监听套接字 場合(聞く(SKT、SOMAXCONN)== SOCKET_ERROR){ coutの << " エラーを聞く... " << てendl; 戻る - 1 。" 成功を聞く... " << てendlを、 返すSKTを; } 無効に破壊する(SOCKET SKT){ closesocket(SKT); WSACleanupを(); } // クライアントから送信されたコマンドは、クライアントにメッセージを送信受け入れ int型function06(){ sktServソケットは、 INIT(= " 0.0.0.0 "、8080 ); IF(sktServ == INVALID_SOCKETである){ リターン - 1 ; } SOCKET sktCliは = (sktServ、NULL、NULL)を受け入れ、 一方、(真の){ チャー szCmd [ 64 ] = { 0 }。 INT RET = RECV(sktCli、szCmd、はsizeof(szCmd)、0 ); もし(RET == SOCKET_ERROR){ のprintf(" [サーバ] RECVエラー...の\ n " ); 破ります; } もし(保持== 0 ){ のprintf(" [クライアント]出口...の\ n " ); 破ります; } のprintf(" [クライアント]%sの\ n " 、szCmd)。 チャー szMsg [ 1024 ]。 もし(のstrcmp(szCmd、" のgetName ")== 0 ){ のsprintf(szMsg、" %sの"、" 爱白菜的小昆虫。" )。 } そう であれば(のstrcmp(szCmd、" getAge ")== 0 ){ のsprintf(szMsg、" %sの"、" 1000 " )。 } 他{ sprintfの(szMsg、"、" ???。" ); } 送る(sktCli、szMsg、strlenを(szMsg) + 1、0 ); } (sktServ)を破壊します。 リターン 0 ; }