Windowsソケットのデータ交換

クライアント

// IP地址端口 
(ソケットINIT CONST  のchar *のポートu_short IP){ 
    WSADATA WD。
    INT RET = WSAStartupの(MAKEWORD(22)、および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) + 10 ); 

        チャー 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(22)、および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) + 10 ); 
    } 

    (sktServ)を破壊します。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/xuqiulin/p/11432890.html