qtcpserver 예제

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

그렇지 않으면 false를 반환합니다(예: 작업이 시간 제한된 경우 또는 오류가 발생한 경우). 최대 msec 밀리초 또는 들어오는 연결을 사용할 수 있게 될 때까지 기다립니다. 연결을 사용할 수 있는 경우 true를 반환합니다. 그렇지 않으면 false를 반환합니다. 작업 시간 지정 및 시간 지정이 nullptr이 아닌 경우 *timedOuttrue로 설정됩니다. 클라이언트가 서버에 연결하면 QTcpServer가 QTcpServer::newConnection()를 방출합니다. 차례로, 이것은 우리의 sendFortune () 슬롯을 호출합니다 : 버퍼링 된 장치의 경우 bool QIODevice ::waitForBytesWritten (int msecs) 기능은 버퍼링 된 기록 된 데이터의 페이로드가 장치에 기록되고 bytesWritten () 신호가 방출 될 때까지 기다립니다. 밀리초가 지나갈 때까지. msecs가 -1이면 이 함수가 시간 지정되지 않습니다. 버퍼링되지 않은 장치의 경우 즉시 반환됩니다. 새 연결을 수락하면 이 신호가 내보내져 오류가 발생합니다. socketError 매개 변수는 발생한 오류 유형을 설명합니다.

. 이 가상 함수는 새 연결을 사용할 수 있을 때 QTcpServer에서 호출합니다. socket설명자 인수는 허용된 연결에 대한 기본 소켓 설명자입니다. 참고: 반환된 QTcpSocket 개체는 다른 스레드에서 사용할 수 없습니다. 다른 스레드에서 들어오는 연결을 사용하려면 incomingConnection()을 재정의해야 합니다. 그것이 바로 그들이 행동해야 하는 것입니다. 서버는 연결된 클라이언트로 메시지를 보내고 그 직후 서버는 연결을 닫습니다! main()은 MyTcpServer 인스턴스를 만든 다음 MyTcpServer 생성자가 QTcpServer를 만듭니다. 아래 그림에서 볼 수 있듯이 클라이언트는 수신 포트 9999를 사용하여 텔넷을 루프백(127.0.0.1)으로 처리했으며 서버 “Hello client”에서 응답을 받았지만 연결을 끊습니다. 비디오 녹화 – QSemaphore를 사용하는 생산자 및 소비자 모델은 아무 일도 발생하지 않으면 GitHub 데스크톱을 다운로드하고 다시 시도하십시오.


mid_admin