c udp 예제

소켓에 대한 논의에서 TCP/IP 프로토콜을 사용하는 소켓과 연결 지향 소켓을 사용한 프로그래밍의 예를 다루었습니다. 여기서는 UDP/IP를 통해 연결없는 소켓을 사용하는 예제를 간략하게 살펴보겠습니다. 그 문자를 보낸 경우, 어떻게 어떤 파일을 보내는 방법에 대한 예를 들어 그림, 전송 된 그림으로 전송 된 스크립트 문자를 변경하는 방법..? 엑셀런트 예, 대단히 감사합니다! 나는 단지 작은 추가가 필요하다는 것을 발견했습니다. 서버에서 버퍼를 정리합니다. 따라서 서버에 추가하기만 하면 됩니다: 이 예제는 운영 체제에 포트를 0으로 설정하여 사용 가능한 포트 번호를 선택하도록 요청합니다. 특정 포트 번호를 사용하려면 프로그래머가 아니지만 전자 제품 및 자동화 된 작업을 만드는 데 관심이있는 라인을 변경하십시오. 이것은 UDP 소켓 통신의 매우 유용한 예입니다. 내가 찾은 것은 프로그램이 데이터를 기다리는 동안 다른 작업을 수행하지 않는다는 것입니다. 이 서버를 “깜박임 Led 1″으로 보내고 명령을 계속 듣고 LED를 켜거나 깜박이거나 끄라고 말하는 것이 좋습니다. 나는 예를 들어 하나의 프로젝트에서 LED 아무 런치를 깜박 일 수 있습니다, 나는 또한 파이에서 실행하고 내가 지금 보내는 명령에 응답 코드를 얻을 수 있지만 백그라운드에서 일을 계속할 수 싶습니다.

이제 클라이언트가 서버에 메시지를 보내고 있습니다. 서버가 해당 클라이언트로 메시지를 다시 보내려면 어떻게 해야 합니까? 연결이 없으므로 서버가 응답을 다시 쓸 수 없습니다. 다행히도, recvfrom 호출은 우리에게 서버의 주소를 주었다. 그것은 remaddr에 배치되었다 : 참고 : 우리는 일반 텔넷 명령UDP 프로토콜을 지원하지 않기 때문에 netcat을 사용했다. netcat의 -u 옵션은 udp 프로토콜을 지정합니다. 제거하십시오 클라이언트에서 가져옵니다 :46 와 함께 : fgets (메시지, BUFLEN, stdin); 이 자습서에서는 IP 네트워크(IPv4)를 통해 UDP 소켓을 사용하는 방법을 소개합니다. UDP는 연결이 적은 프로토콜입니다. 클라이언트와 서버 간에 연결이 설정되지 않았습니다. 표준 UDP 클라이언트/서버 만들기에 대해 설명합니다 여기 서버는 sendto에서 해당 주소를 사용하고 받는 사람의 주소로 메시지를 다시 보낼 수 있습니다. 다음 단계는 클라이언트를 사용하여 이 서버에 연결하는 것입니다. 우리는 조금 나중에 클라이언트 프로그램을 만들 것입니다하지만 먼저 우리가 netcat을 사용할 수있는이 코드를 테스트하기 위해. 반드시 실수이며 메모리가 할당 된 심각한 것은 해제되지 않습니다 (이전 buf 포인터 값이 매번 손실되나 덮어 쓸 수 없습니다).

또한 입력시 데이터 길이가 제공되기 때문에 memset()을 할 필요가 없습니다. recvfrom 호출은 클라이언트와 서버 간에 배열, 벡터 등을 전달하는 방법 버퍼로 읽은 바이트 수를 반환합니다. 터미널에서 gcc server.c & ./a.out을 수행하여 위의 코드를 실행합니다. 그런 다음 UDP에서이 같은 데이터를 기다리는 것을 표시합니다, 클라이언트는 TCP와 같은 서버와 연결을 형성하지 않고 대신, 그것은 단지 데이터 그램을 보냅니다. 마찬가지로 서버는 연결을 수락할 필요가 없으며 데이터그램이 도착할 때까지 기다릴 뿐입니다. UDP에서 connect()라는 함수를 호출할 수 있지만 TCP에서와 같은 것은 발생하지 않습니다. 3가지 방법으로 악수할 수 없습니다. 즉각적인 오류를 확인하고 피어의 IP 주소와 포트 번호를 저장합니다. connect()는 피어 주소를 저장하므로 sendto()에서 서버 주소 및 서버 주소 길이 인수를 전달할 필요가 없습니다. 다음은 서버-클라이언트 간의 메시지 전송을 보여주는 구현 : Silver Moon의 접근 방식이 작동하지만 가장 좋은 방법은 epoll()을 사용하여 소켓 연결을 비동기적으로 수신하고 TCP가 아닌 UDP를 사용하는 것이므로 UDP는 신뢰할 수 없으므로 일부 명령은 신뢰할 수 없습니다.

의도한 대로 서버에 연결하지 못할 수 있습니다. 이것이 대부분의 최신 소켓 서버에서 수행되는 것입니다. epoll() (리눅스 시스템 호출 그래서 라즈베리 파이에서 작동 해야)를 사용 하는 방법을 인터넷 검색을 시도 합니다.

02 August, 2019
Posted in Uncategorized

Author: wolff