c++ socket 예제 속시원내과 | 2019년 8월 2일

3. 소켓이 연결되면 서버는 클라이언트 소켓 설명기를 통해 클라이언트 소켓에 날짜와 시간을 보냅니다. 세트톡옵스는 선택 사항입니다. “이미 사용 중이면 주소”와 같은 오류를 줄이는 데 도움이 되며 주소와 포트를 다시 사용하는 데 도움이 됩니다. 파일 설명자가 참조하는 소켓에 대한 옵션을 조작하는 데 도움이 됩니다. 예를 들어 텔넷에 대해 이야기해 보겠습니다. 포트 23의 원격 호스트에 텔넷(클라이언트)을 연결하면 해당 호스트의 프로그램(텔넷, 서버라고 함)이 생겨나게 됩니다. 그것은 들어오는 텔넷 연결을 처리, 로그인 프롬프트 등으로 우리를 설정합니다. 소켓에는 스트림 소켓과 데이터그램 소켓이 가장 많이 사용됩니다. 소켓 유형은 /usr/include/bits/socket.h 에 정의되어 있습니다. 도메인 및 유형에 대한 다른 많은 선택 사항이 있지만 가장 일반적인 항목입니다. 소켓 맨 페이지를 보려면 여기를 클릭하십시오. 인터넷 도메인의 소켓 주소는 호스트 컴퓨터의 인터넷 주소로 구성됩니다(인터넷의 모든 컴퓨터에는 고유한 32비트 주소(IP 주소라고도 함).

또한 각 소켓에는 해당 호스트에 포트 번호가 필요합니다. 포트 번호는 16비트 서명되지 않은 정수입니다. 낮은 숫자는 표준 서비스를 위해 유닉스에서 예약되어 있습니다. 예를 들어 FTP 서버의 포트 번호는 21입니다. 표준 서비스는 클라이언트가 주소를 알 수 있도록 모든 컴퓨터에서 동일한 포트에 있어야 합니다. 그러나 2000이상의 포트 번호는 일반적으로 사용할 수 있습니다. socket() 함수의 3번째 인수는 항상 0이어야 하는 프로토콜입니다. 이 사양은 프로토콜 패밀리 내에서 여러 프로토콜을 허용하므로 이 인수는 패밀리에서 프로토콜을 선택하는 데 사용됩니다. send() 함수는 Hello, worldn” 문자열의 13바이트를 새 연결을 설명하는 새 소켓으로 보냅니다.

이 자습서의 예제에서는 TCP 프로토콜을 사용 하 여 인터넷 도메인에서 소켓을 사용 합니다. 소켓은 서버 프로세스에 할당된 리소스입니다. 서버는 시스템 호출 소켓()을 사용하여 생성하며 다른 프로세스와 공유할 수 없습니다. 이렇게 하면 새 소켓 파일 설명자가 연결된 클라이언트와 통신하는 데 사용되는 반면 원래 소켓 파일 설명자는 새 연결을 수락하는 데 계속 사용할 수 있습니다. 유닉스 도메인의 소켓 주소는 기본적으로 파일 시스템의 항목인 문자 문자열입니다. bind() 호출은 소켓 파일 설명자, 주소 구조 및 주소 구조의 길이를 전달합니다. 이 호출은 포트 20001의 현재 IP 주소에 소켓을 바인딩합니다. accept()의 마지막 인수는 주소 구조의 크기에 대한 포인터입니다. accept() 함수가 연결 클라이언트의 주소 정보를 주소 구조에 쓰고 해당 구조의 크기가 clilen이기 때문입니다. accept() 함수는 수락된 연결에 대한 새 소켓 파일 설명기를 반환합니다: 소켓은 웹을 탐색할 때 사용되는 표준 인터넷 프로토콜에서 다양한 프로토콜을 사용하여 통신하는 데 사용할 수 있습니다.