qtcpserver 예제

이 예제는 Fortune 클라이언트 예제 또는 행운 클라이언트 차단 예제와 함께 실행됩니다. 또한 이 예제에서는 QTcpSever의 비동기 모드를 사용하고 있습니다. QTcpServer에는 즉시 반환되는 listen() 메서드가 있습니다. 수신 대기가 성공적으로 시작되면 서버는 신호 newConnection()를 방출합니다. listen()을 호출한 후 는 waitForNewConnection() 차단 메서드(동기)를 호출하지 않습니다. 따라서 이 예제에서는 들어오는 모든 요청에 대해 newConnection() 신호를 내보리려면 이벤트 루프가 실행되어야 합니다(QEventLoop 및 QAbstractEventDispatcher). QTcpServer를 사용하여 들어오는 TCP 연결을 수락하고 간단한 QDataStream 기반 데이터 전송 프로토콜을 사용하여 연결을 닫기 전에 연결 클라이언트(Fortune 클라이언트 예제에서)에 자산을 작성합니다. Fortune Server 예제에서는 간단한 네트워크 서비스를 위한 서버를 만드는 방법을 보여 주며 있습니다. 따라서 헤더 파일이 완료되고 구현 파일인 mytcpserver.cpp로 이동하여 주소 및 포트 포트에서 들어오는 연결을 수신하도록 서버에 알려줍니다.

포트가 0이면 포트가 자동으로 선택됩니다. 주소가 QHostAddress::Any인 경우 서버는 모든 네트워크 인터페이스에서 수신을 듣습니다. . . 그런 다음 MyTcpServer라는 새 클래스를 만들려고 합니다. 일반적으로 TCP 소켓의 경우 C ++ 자습서 : 소켓 – 서버 및 클라이언트를 방문하십시오. . 이 함수는 이벤트 루프 없이 작동할 수 있습니다.

비 GUI 응용 프로그램을 작성하고 비 GUI 스레드에서 I/O 작업을 수행할 때 유용합니다. . 서버를 닫습니다. 서버가 더 이상 들어오는 연결을 수신하지 않습니다. MyTcpServer의 인스턴스를 만들어야 합니다. 그런 다음 MyTcpServer의 생성자에서 QTcpServer의 인스턴스가 만들어지고 서버가 시작됩니다. 데이터 페이로드가 장치에 기록된 경우 true를 반환합니다. 그렇지 않으면 false를 반환합니다(예: 작업이 시간 제한된 경우 또는 오류가 발생한 경우). 다음Pending연결())을 호출하여 보류 중인 연결을 연결된 QTcpSocket으로 수락합니다. 이 함수는 QAbstractSocket::ConnectedState에서 QTcpSocket에 대한 포인터를 반환하여 클라이언트와 통신하는 데 사용할 수 있습니다. 기본 구현은 QTcpSocket을 만들고 소켓 설명자 집합을 설정한 다음 QTcpSocket을 보류 중인 연결의 내부 목록에 저장합니다.

마지막으로 newConnection()가 내보됩니다. QTcpSocket * QTcpServer::nextPendingConnection()는 연결된 QTcpSocket 개체로 다음 보류 중인 연결을 반환합니다. 서버가 QNetworkProxy를 사용하는 경우 반환된 설명자가 네이티브 소켓 함수에서 사용하지 못할 수 있습니다. void QTcpServer::newConnection() 신호는 새 연결을 사용할 수 있게 될 때마다 내보내입니다. . 아래 그림에서 볼 수 있듯이 클라이언트는 수신 포트 9999를 사용하여 텔넷을 루프백(127.0.0.1)으로 처리했으며 서버 “Hello client”에서 응답을 받았지만 연결을 끊습니다. . 새 연결을 수락하면 이 신호가 내보내져 오류가 발생합니다.

socketError 매개 변수는 발생한 오류 유형을 설명합니다. 이 슬롯의 목적은 행운 목록에서 임의의 줄을 선택하고 QDataStream을 사용하여 QByteArray로 인코딩한 다음 연결 소켓에 쓰는 것입니다. 이것은 QTcpSocket을 사용하여 이진 데이터를 전송하는 일반적인 방법입니다. 먼저 QByteArray 및 QDataStream 개체를 만들어 바이트배열을 QDataStream의 생성자로 전달합니다. 그런 다음 QDataStream의 프로토콜 버전을 QDataStream::Qt_4_0으로 명시적으로 설정하여 이후 버전의 Qt에서 클라이언트와 통신할 수 있도록 합니다(QDataStream::setVersion()참조). 우리는 임의의 행운에 스트리밍하여 계속. 서버가 들어오는 명령을 수신하는 데 사용하는 기본 소켓 설명기를 반환하거나 서버가 수신되지 않는 경우 -1을 반환합니다.