tcp client 예제

“다른 줄”을 입력하면 str_cli는 writen을 호출하고 클라이언트 TCP는 데이터를 서버로 보냅니다. 클라이언트 TCP가 FIN을 수신하면 서버 프로세스가 연결 종료를 닫았고 더 이상 데이터를 보내지 않음을 나타내기 때문에 TCP에서 이 작업을 허용합니다. FIN의 수신은 클라이언트 TCP에게 서버 프로세스가 종료되었음을 알리지 않습니다(이 경우 이 경우). 클라이언트 프로세스는 2단계에서 수신된 FIN으로 인해 쓰기 및 판독회가 0(EOF)을 반환하는 호출 직후에 읽기 를 호출하기 때문에 RST를 볼 수 없습니다. 클라이언트는 이 시점에서 EOF(str_cli)를 수신할 것으로 예상하지 않으므로 “서버가 조기에 종료되었습니다.” 오류 메시지가 종료됩니다. TCP 클라이언트와 서버는 그림 4.1에서 다이어그램으로 요약한 함수의 흐름을 따릅니다. 아래 코드는 동시 서버 프로그램입니다: 먼저 서버(tcpcliserv/tcpserv03.c)를 백그라운드에서 실행한 다음 새 클라이언트: 클라이언트에서 텍스트 줄을 계속 읽도록 서버를 수정하지만 서버는 이제 해당 줄에 두 개의 텍스트가 포함될 것으로 예상합니다. 공백으로 구분된 정수와 서버는 두 정수의 합계를 반환합니다. 모든 변경 사항은 우리의 str_echo 기능입니다: 전제 조건 – C /C ++에서 소켓 프로그래밍, TCP 및 UDP 서버를 사용하여 선택, UDP 서버-클라이언트 구현 을 사용하여 우리는 TCP를 사용하여 클라이언트와 서버 사이의 연결을 만드는 경우, TCP와 같은 몇 가지 기능이 있습니다, TCP 높은 신뢰성을 필요로 하는 응용 제품에 적합하며 전송 시간이 상대적으로 덜 중요합니다. 그것은 HTTP, HTTP, FTP, SMTP, 텔넷과 같은 다른 프로토콜에 의해 사용된다. TCP는 지정된 순서로 데이터 패킷을 다시 정렬합니다. 전송된 데이터가 그대로 유지되고 전송된 순서와 동일한 순서로 도착한다는 절대적인 보장이 있습니다. TCP는 흐름 제어를 수행하며 사용자 데이터를 보내기 전에 소켓 연결을 설정하기 위해 세 개의 패킷이 필요합니다.

TCP는 안정성 및 정체 제어를 처리합니다. 또한 오류 검사 및 오류 복구를 수행합니다. 잘못된 패킷은 원본에서 대상으로 다시 전송됩니다. 소켓은 도메인이 있는 소켓(예: IPv4용 AF_INET 또는 IPv6의 AF_INET6)이 있는 소켓을 생성하고, socket_type은 UDP 또는 TCP 또는 기타 소켓 유형을 사용할지 여부이며, 프로토콜은 프로토콜 구성의 선택적 선택입니다(예를 들어 이 것을 기본값으로 0으로 남겨둘 수 있음). 이 호출은 외부 세계/네트워크와 통신할 수 있는 커널에 소켓 개체를 만듭니다. getaddressinfo의 결과를 사용하여 소켓 매개 변수를 채우거나 수동으로 제공할 수 있습니다. 그런 다음 동일한 호스트에서 클라이언트를 시작하여 서버의 IP 주소127.0.0.1(루프백 주소)을 지정합니다. 서버의 일반(루프백이 아닌) IP 주소를 지정할 수도 있습니다.

위의 예제에서는 하이퍼텍스트 전송 프로토콜을 사용하여 서버에 대한 요청을 보여 줍니다. 다음 요청을 사용하여 웹 페이지(또는 기타 리소스)가 요청됩니다. 동일한 아키텍처의 두 컴퓨터에서 클라이언트와 서버를 실행하는 경우 두 개의 SPARC 컴퓨터가 작동합니다. 그러나 클라이언트와 서버가 서로 다른 아키텍처의 두 컴퓨터에있을 때 (서버가 큰 엔디안 SPARC 시스템 freebsd에 있고 클라이언트가 작은 엔디안 인텔 시스템 리눅스에 있다고 말함) 작동하지 않습니다. 이 예제에서는 신호를 잡는 네트워크 프로그램을 작성할 때 중단된 시스템 호출을 인식해야 하며 이를 처리해야 한다는 것을 알고 있습니다. 이 예제에서는 표준 C 라이브러리에 제공된 신호 함수로 인해 중단된 시스템 호출이 커널에 의해 자동으로 다시 시작되지 않습니다. 일부 다른 시스템은 중단된 시스템 호출을 자동으로 다시 시작합니다. 4.4BSD에서 동일한 예제를 실행하는 경우 신호 기능의 라이브러리 버전을 사용하여 커널이 중단된 시스템 호출을 다시 시작하고 수락해도 오류가 반환되지 않습니다.