qt udp 통신 예제

get()를 사용하여 단일 파일을 검색하는 방법을 보여 주는 예제로 시작합니다. 명령줄에 지정된 원격 파일을 다운로드하는 ftpget이라는 콘솔 응용 프로그램이 있습니다. main() 함수부터 시작해 보겠습니다: 임의의 FTP 명령은 rawCommand()를 사용하여 실행할 수 있습니다. 예를 들어 SITE CHMOD 명령을 실행하는 방법은 다음과 같습니다: QFtp는 명령 실행을 시작할 때 명령시작(int) 신호를 방출하고 명령이 완료되면 완료(int, bool) 신호를 방출합니다. int 매개 변수는 명령을 식별하는 ID 번호입니다. 개별 명령의 운명에 관심이 있다면 명령을 예약할 때 ID 번호를 저장할 수 있습니다. ID 번호를 추적하면 사용자에게 자세한 피드백을 제공할 수 있습니다. 예를 들어 Receiver 클래스의 생성자 내부에서 `status` 속성을 초기화하고 하위 수준 네트워크 통신을 캡슐화하는 QUdpSocket 개체를 만듭니다. bind() 호출하여 들어오는 브로드캐스트 메시지에 대해 포트 45454에서 소켓을 수신합니다. 다음 단계에서는 새 데이터그램이 도착할 때마다 방출되는 소켓의 readyRead() 신호를 자체 슬롯 프로세스PendingDatagrams()에 대해 연결합니다. 이제 보다 고급 예제를 살펴보겠습니다. 스파이더 명령줄 프로그램은 FTP 디렉터리에있는 모든 파일을 다운로드하여 모든 디렉토리의 하위 디렉토리에서 재귀적으로 다운로드합니다. 네트워크 논리는 Spider 클래스에 있습니다: 브로드캐스트 발신자, 브로드캐스트 수신기, 멀티캐스트 발신자 및 멀티캐스트 수신기 예제는 응용 프로그램에서 QUdpSocket을 사용하는 방법을 보여 줍니다.

두 FTP 예제에서 get()을 사용하여 검색된 데이터가 QFile에 기록되었습니다. 이것은 사실이 아닙니다. 메모리에 데이터를 원한다면 QByteArray를 래핑하는 QIODevice 하위 클래스인 QBuffer를 사용할 수 있습니다. 예: 오류가 발생할 경우 보고서가 유효하지 않은 QNetworkDatagram을 반환합니다. maxSize 바이트보다 큰 데이터그램을 수신하고 보낸 사람의 호스트 주소 및 포트와 함께 QNetworkDatagram 개체에서 반환합니다. 가능하면 이 함수는 수신 시 데이터그램의 대상 주소, 포트 및 홉 개수를 확인하려고 시도합니다. 오류가 발생하면 QFtp는 명령 큐를 자동으로 지웁깁니다. 즉, 연결 또는 로그인에 실패하면 큐에 따르는 명령은 실행되지 않습니다. 동일한 QFtp 개체를 사용하여 오류가 발생한 후 새 명령을 예약하면 이러한 명령이 큐에 대기되고 실행됩니다.

오류가 없는 경우 FTP 명령 및 신호의 시퀀스는 다음과 같습니다. 문제가 발생하면 함수는 cerr에 오류 메시지를 인쇄하고 false를 반환하여 다운로드가 실패했음을 나타냅니다. Qt는 FTP 및 HTTP로 작업할 수 있는 QFtp 및 QHttp 클래스를 제공합니다. 이러한 프로토콜은 파일을 다운로드 및 업로드하고 HTTP의 경우 웹 서버로 요청을 보내고 결과를 검색하는 데 사용하기 쉽습니다.