TCP 통신에 구현 (C ++)

  TCP 통신 메커니즘, 전이중의 형태로 클라이언트와 서버 사이의 링크 (송신 될 수있는 데이터, 또한 데이터를 수신 할 수있다),이 처리가 수행되지 않는 안정적인 데이터 전송 (데이터 송수신 인 "컴퓨터 네트워크 - 하향식 (top-down)", UDP 왜 신뢰할 수있는 전송의 세부 사항으로하지 않습니다) 손실됩니다, 참조, 다음과 같은 코드가 C 구현 모델에 사용된다 ++

  1.TCP ------ 서버

(비활성화 : 4996)의 #pragma 경고, 
사용법 #include <iostream> 
사용법 #include <winsock2.h> 
사용법 #include <WINDOWS.H> 
사용하여 네임 스페이스 성병; 
#pragma 주석 (lib, "ws2_32.lib") 
클래스 TCP 
{ 
공개 : 
    무효 check_version (); 
    보이드 intintail (); 
    () blind_listen 무효화; 
    보이드 sent_recv (); 
개인 : 
    WSADATA 데이터; 
    소켓의 sock_server; 
    소켓의 sock_client; 
    를 sockaddr_in add_server; 
    를 sockaddr_in ADD_CLIENT; 

    

}; 
() 주요 int로 
{ 
    TCP를들 a 
    a.check_version (); 
    a.intintail (); 
    a.blind_listen (); 
    a.sent_recv ();
  
} 
보이드 :: check_version하는 TCP () 
{ 
// = INT RET을 WSAStartup (MAKEWORD (2,2), 데이터), 
    IF (!을 WSAStartup (MAKEWORD (2,2), 데이터) = 0) 
    { 
        COUT << "소켓 단어의 잘못된 버전 "<< endl의; 
        WSACleanup을 (); 
    } 
    다른 
    { 
        COUT <<"소켓 올바른 버전의 "<< endl의; 
    } 
} 

은 TCP (intintail 무효 :) 
{ 
    // 구성 소켓 인터페이스 
    sock_server = 소켓 (AF_INET, SOCK_STREAM, 0); 
    // 어드레스 구성 설정 
    add_server.sin_family = AF_INET; 
    add_server.sin_port htons = (); 
    add_server.sin_addr.S_un.S_addr inet_addr은 = ( ""); // IP 주소를 기입
} 무효 TCP :: blind_listen () {N = INT는 sizeof (를 sockaddr_in) = INT RET 바인드 (sock_server (LPSOCKADDR) add_server, N) 경우 (RET == SOCKET_ERROR) {COUT은 << "귀속 소켓 실패한 "<< ENDL; WSACleanup을 ()한다} else {COUT <<"바인드 소켓 성공 "<< ENDL가} // 소켓 INT RET2 = 청취 청취를 시작 (sock_server 10) // 제 미완성 큐 및 큐 파라미터 결정이 완료되었는지의 합의 최대 연결 번호 (RET2 == SOCKET_ERROR) {COUT << << ENDL "모니터 실패"; WSACleanup을 ()한다} else {COUT << "모니터 성공" << endl의;}} 무효 TCP :: sent_recv () {cout을 << << "링크를 클라이언트로 준비하고있다"<< "\ t"을 "기다려주십시오 ..."<< endl의 슬립 (3000); 동안 (TRUE) {INT LEN =를 sizeof (SOCKADDR) // 먼저 클라이언트 sock_client 연결 = 동의했다 (sock_server (LPSOCKADDR를) ADD_CLIENT, 렌) 경우 (sock_client == SOCKET_ERROR) {COUT << "연결 실패"<< ENDL;를 WSACleanup을 ();사용한다} else {COUT << "성공적인 링크"<< ENDL을; 침입 // 숯 빼앗아 송신} 및 수신 데이터 [100] = "안녕하세요 클라이언트"; 경우 (송신 (sock_client, SER, 100, 0) == SOCKET_ERROR) 다른 {cout과는 << << endl의 "를 성공적으로 전송";} {; WSACleanup을 (); 휴식을 cout과는 << endl의 << "전송 실패"}}}

    2TCP ----- 클라이언트

의 #pragma 경고 (해제 : 4996); 
사용법 #include <iostream> 
네임 스페이스를 사용하여 표준; 
사용법 #include <winsock2.h> 
의 #pragma 주석 (lib 디렉토리, "ws2_32.lib") 
사용법 #include <WINDOWS.H> 
클래스 TCP 
{ 
공개 : 
    무효 intalize (); 
    보이드 my_connect (); 
    보이드 my_recv (); 

개인 : 
    소켓의 sock_client; 
    를 sockaddr_in addr_server; 
    를 sockaddr_in client_ADDR; 
    WSADATA 데이터; 
공개 : 숯 촬영 [100]; //接受并且进行打印的数组
      INT 렌; 
}; 

() 주요 int로 
{ 
    TCP를들 a 
    a.intalize (); 
    a.my_connect (); 
    a.my_recv (); 
  
}  
무효 TCP :: intalize ()
{
    IF (!을 WSAStartup (MAKEWORD (2, 2), 데이터) = 0) 
    { 
        ; COUT은 << << ENDL "잘못된 버전 소켓" 
        WSACleanup을가 (); 
    } 
    다른 
    { 
        COUT << "소켓 정확한 버전" ENDL <<; 
    } 
    memset 함수 (addr_server, 0, sizeof의 (addr_server)); 
    sock_client = 소켓 (AF_INET는, SOCK_STREAM, 0), 
    IF는 (== INVALID_SOCKET는 sock_client이다) 
    { 
        ; COUT << "설정 실패"<< ENDL 
        WSACleanup을 () ; 
    } 
    다른 
    { 
        COUT << "성공적인 세트"<< ENDL; 
    } 
    addr_server.sin_family = AF_INET; 
    addr_server.sin_port htons = ();// 컴퓨터의 포트를 선택
    addr_server.sin_addr.S_un.S_addr = inet_addr은 ( ""); //填写一个IP를地址
    LEN =를 sizeof (를 sockaddr_in); 
} 

무효 TCP :: my_connect () 
{ 
    경우 (연결 (sock_client (LPSOCKADDR) addr_server 렌) == SOCKET_ERROR) 
    { 
        COUT << "连接失败"<< ENDL; 
        WSACleanup을 (); 
    } 
    다른 
    { 
        COUT << "连接成功"<< ENDL; 
    } 
} 

무효 TCP :: my_recv을 () 
{ 

    경우 (RECV (sock_client, REC, 1,0) == SOCKET_ERROR) 
    { 
        COUT << "接收失败"<< ENDL; 
        WSACleanup을 (); 
    } 
    다른 
    { 
        COUT <<
        COUT은 << "정보 서버는 다음과 같습니다"<< endl의 << REC; 
    } 
}

  【말】

(비활성화 : 4996)의 #pragma 경고를 추가 할 경우합니다 inet_addr () vs2017에서 호출 vs2019를 들어, 오류 것 때문에 문제의 버전

추천

출처www.cnblogs.com/dfxdd/p/12221939.html