c++ udp 통신 예제

예를 들어 텔넷에 대해 이야기해 보겠습니다. 포트 23의 원격 호스트에 텔넷(클라이언트)을 연결하면 해당 호스트의 프로그램(텔넷, 서버라고 함)이 생겨나게 됩니다. 그것은 들어오는 텔넷 연결을 처리, 로그인 프롬프트 등으로 우리를 설정합니다. 예를 들어 google.com 주소를 찾으려고 한다고 가정합니다. 코드는 다음과 같습니다 : 소켓에 대한 논의에서 TCP / IP 프로토콜을 사용하는 소켓 : 연결 지향 소켓프로그래밍의 예를 다루었습니다. 여기서는 UDP/IP를 통해 연결없는 소켓을 사용하는 예제를 간략하게 살펴보겠습니다. 두 번째 매개 변수의 경우 구조 sockaddr는 OS에서 주소 패밀리를 식별하는 첫 번째 바이트 몇 을 읽을 수 있는 일반 컨테이너입니다. 주소 패밀리는 특정 통신 유형에 적합한 요소를 포함하는 sockaddr 구조체의 변형을 결정합니다. IP 네트워킹의 경우 헤더 netinet/in.h에 정의된 구조형 sockaddr_in을 사용합니다.

이 구조는 UDP 통신 – 클라이언트와 서버가 TCP 소켓을 사용하여 서로 연결을 설정하지 않으며 종료 시스템 호출을 사용하여 소켓을 닫거나 한 방향으로 통신을 종료할 수 있음을 확인했습니다. UDP에는 연결 개념이 없으므로 종료를 호출할 필요가 없습니다. 그러나 소켓은 여전히 커널에서 파일 설명자(file 설명자)를 사용하므로 파일과 마찬가지로 가까운 시스템 호출을 통해 해제할 수 있습니다. 전송 주소는 소켓 주소 구조에 정의되어 있습니다. 소켓은 다양한 유형의 통신 인터페이스와 함께 작동하도록 설계되었기 때문에 인터페이스는 매우 일반적입니다. 포트 번호를 매개 변수로 받아들이는 대신 사용 중이던 주소 패밀리(네트워크 유형)에서 실제 형식이 결정되는 sockaddr 구조를 사용합니다. 예를 들어 UNIX 도메인 소켓을 사용하는 경우 실제로 파일 시스템에서 파일을 만듭니다. 이것은 차단 호출입니다. 연결()에 대한 호출을 발행할 때 연결이 이루어지거나 오류가 발생할 때까지 프로그램이 제어권을 되찾지 못하기 때문입니다.

예를 들어 웹 브라우저를 작성한다고 가정해 보겠습니다. 웹 서버에 연결하려고 하지만 서버가 응답하지 않습니다. 이제 connect() API가 중지 단추를 클릭하여 연결 시도를 중지하기를 원합니다. 그러나 그것은 할 수 없습니다. 성공 시 0이 될 수 있는 반환또는 오류시 -1을 기다립니다. 인수 : 도메인 – 통신 도메인을 지정합니다 (IPv4에 대한 AF_INET6/ Af_INET6 IPv6에 대한) 유형 – 생성할 소켓 유형 (TCP용 SOCK_STREAM / UDP용 SOCK_DGRAM) 프로토콜 – 소켓에서 사용할 프로토콜입니다. 0은 주소 패밀리에 기본 프로토콜을 사용하는 것을 의미합니다. 이 예제는 포트를 0으로 설정하여 사용 가능한 포트 번호를 선택하도록 운영 체제에 요청합니다. 특정 포트 번호를 사용하려면 *버퍼에서 소켓 fd로 n바이트를 보내는 줄을 변경합니다. 전송된 바이트 수 또는 오류시 -1을 반환합니다. 첫 번째 매개 변수인 소켓은 소켓 시스템 호출을 통해 만든 소켓입니다.

모든 것이 잘 되면 h_addr_list에는 IP 주소 목록이 포함됩니다. 호스트에 대해 IP 주소가 두 개 이상 있을 수 있습니다. 실제로 는 주소를 사용할 수 있거나 특정 서브넷과 일치하는 주소를 선택할 수 있습니다. 32비트 IPv4 주소가 있는지 확인하려면(h_addrtype == AF_INET) 및 (h_length == 4)를 확인할 수 있습니다. 여기서는 게으르고 목록의 첫 번째 주소를 사용합니다. UDP/IP 소켓의 경우 IP 주소 패밀리(AF_INET) 및 데이터그램 서비스(SOCK_DGRAM)를 지정하려고 합니다.

Comments are closed.