udp 소켓통신 예제

이 자습서에서는 IP 네트워크(IPv4)를 통해 UDP 소켓을 사용하는 방법을 소개합니다. 파일 전송이 수행되거나 많은 양의 데이터가 부분적으로 전송되는 경우 작업을 완료하는 데 훨씬 더 안정적이어야 합니다. 그런 다음 TCP 소켓이 사용됩니다. 속도 외에도 일부 종류의 통신은 TCP의 안정성을 필요로 하지 않고 대신 낮은 대기 시간을 가치로 삼을 필요가 있습니다. 이 비디오는 TCP 대신 UDP를 통해 실행하면 도움이 될 수 있는 응용 프로그램의 좋은 예입니다. 일반적으로 TCP 클라이언트는 IP 주소를 소켓에 바인딩하지 않습니다. 커널은 사용되는 나가는 인터페이스에 따라 연결된 소스 IP 소켓을 선택합니다. TCP 서버가 IP 주소를 소켓에 바인딩하지 않는 경우 커널은 들어오는 패킷의 대상 IP 주소를 서버의 원본 주소로 사용합니다. IPv4 소켓 주소 구조는 sockaddr_in으로 명명되며 헤더를 포함하여 정의됩니다. 첫 번째 매개 변수인 소켓은 미리 만든 소켓입니다. 바인드 호출을 통해 해당 소켓에 할당된 포트 번호는 recvfrom가 데이터를 기다릴 포트에 대해 알려줍니다. 들어오는 데이터는 버퍼의 메모리에 배치되며 길이 바이트가 전송되지 않습니다(버퍼 크기).

여기서는 플래그를 무시합니다. 이에 대한 자세한 내용은 man 페이지에서 recvfrom를 볼 수 있습니다. 이 매개 변수를 사용하면 대역 외 데이터를 처리하거나, 큐에서 제거하지 않고 들어오는 메시지를 엿보거나, 요청이 완전히 충족될 때까지 차단할 수 있습니다. 우리는 안전하게 이들을 무시하고 0을 사용할 수 있습니다. src_addr 매개 변수는 할당 하 고 메시지의 보낸 사람을 식별 하기 위해 recvfrom에 의해 채워집니다 sockaddr 구조에 대 한 포인터입니다. 이 구조의 길이는 src_len에 저장됩니다. 보낸 사람의 신원을 확인하지 않으면 둘 다 0으로 설정할 수 있지만 보낸 사람에게 회신할 방법이 없습니다. 연결이 설정되면 반환을 수락하고 서버는 fork를 호출하고 자식 프로세스는 연결된 소켓 connfd에서 클라이언트를 처리합니다. 부모 프로세스는 다른 연결(수신 대기 소켓 listenfd)을 기다립니다. 자식이 새 클라이언트를 처리하므로 부모가 연결된 소켓을 닫습니다.