Threaded Fortune Server 예제에서는 스레드를 사용하여 다른 클라이언트의 요청을 처리하는 간단한 네트워크 서비스에 대한 서버를 만드는 방법을 보여 주며 있습니다. 포춘 클라이언트 예제와 함께 실행됩니다. 그런 다음 QTcpServer::newPendingConnection()을 호출하여 연결의 서버 측을 나타내는 QTcpSocket을 반환합니다. QTcpSocket::d연결()을 QObject::deleteLater()에 연결하면 연결을 끊은 후 소켓이 삭제됩니다. 오늘은 주제를 다시 방문하고 보다 정교한 예제를 제공하고 자합니다 – 그들 (클라이언트와 서버) 사이의 네트워크 통신이있는 두 응용 프로그램. 1 년 이상 전에 QML에 대한 C ++ 백 엔드에 대한 기사를 작성하여 QML과 C ++간의 상호 작용에 대한 매우 기본적인 예를 보여 주었습니다. C ++/QML 상호 작용에 대해 모르는 경우 먼저 읽는 것이 좋습니다. 이 예제에서는 클라이언트 측 DTLS 연결을 구현하는 방법을 보여 줍니다. 이 예제에서는 두 프로그램이 소켓을 사용하여 통신하는 방법을 보여 주어집니다.
인코딩 된 행운은 QTcpSocket::write()를 사용하여 작성되며 QTcpSocket이 네트워크에 재산을 작성한 후 연결을 닫을 QTcpSocket::disconnectFromHost()라고 합니다. QTcpSocket은 비동기적으로 작동하기 때문에 이 함수가 반환된 후 데이터가 기록되고 컨트롤이 Qt의 이벤트 루프로 돌아갑니다. 그러면 소켓이 닫히면 QObject::deleteLater()가 삭제됩니다. 이 예제에서는 QTcpServer를 사용하여 들어오는 TCP 연결을 수락하고 간단한 QDataStream 기반 데이터 전송 프로토콜을 사용하여 연결을 닫기 전에 연결 클라이언트(Fortune 클라이언트 예제에서)에 자산을 작성합니다. 클라이언트 프로그램과 서버 프로그램이라는 두 가지 간단한 예제 프로그램이 제공됩니다. 둘 다 QSocket 클래스를 사용 하 고 서버는 QServerSocket 클래스를 사용 합니다. 이 예제에서는 Qt를 사용 하 고 네트워크 프로그래밍의 기본 측면을 보여 줍니다. 이 슬롯의 목적은 행운 목록에서 임의의 줄을 선택하고 QDataStream을 사용하여 QByteArray로 인코딩한 다음 연결 소켓에 쓰는 것입니다. 이것은 QTcpSocket을 사용하여 이진 데이터를 전송하는 일반적인 방법입니다. 먼저 QByteArray 및 QDataStream 개체를 만들어 바이트배열을 QDataStream의 생성자로 전달합니다.
그런 다음 QDataStream의 프로토콜 버전을 QDataStream::Qt_4_0으로 명시적으로 설정하여 Qt의 이후 버전에서 클라이언트와 통신할 수 있도록 합니다(QDataStream:setVersion()참조). 심지어 여러 클라이언트가있을 수 있습니다 – 서버는 그들 각각에 대해 별도의 소켓을 만들 것입니다 : Qt 위젯으로 작업 할 때 모든 것이 이미 C ++에 있으므로 주입 된 백 엔드 개체를 통해이 QML-C ++ 상호 작용을 수행 할 필요가 없습니다. 즉, 실제로 질문을 구걸 : 왜 심지어 귀찮게, 왜 결국 그렇게 쉽게 하기 때문에, Qt 위젯으로 모든 프로젝트를 하지? 글쎄, 조금 쉽게, 그래,하지만 다음 스크린 샷을 살펴보고 당신이 더 좋아하는 GUI, 이 하나 (Qt 위젯)를 말해 : 브라우저는이 서버가 이해할 수없는 요청을 보냈습니다. 다음은이 섹션에서 사용되는 파일입니다 : SocketTest.tar.gz 새 연결이있을 때마다 새 스레드가 생성됩니다. . . 우리가 « QApplication : 이러한 파일이나 디렉토리 »오류가있을 때, 우리는 지금 .pro의 QT qmake 변수에 위젯을 추가해야합니다 : 그런데, 나는 Qt 위젯으로 약 5 년 전에 거의 동일한 데모를 만들었기 때문에 나를 위해 Qt Quick – splittin에 « 포트 »하는 것이 훨씬 더 흥미로웠습니다. g 프런트 엔드와 백 엔드에 넣습니다. 클라이언트 응용 프로그램의 경우를 살펴보겠습니다 (더 흥미로운 응용 프로그램입니다). 호스트는 문자열 형식의 IP 주소이거나 DNS 이름일 수 있습니다. Q3Socket은 필요한 경우 일반 DNS 조회를 수행합니다.
포트는 다른 라이브러리와 달리 네이티브 바이트 순서입니다. 암호화된(SSL) 연결을 통해 통신하는 방법을 보여 줍니다. 기본적으로, 그게 다야, 하지만 난 Q_PROPERTY의 작동 방식을 설명해야 할 것 같아요. 이 코드 조각에서 사용했습니다: 여기서는 QML 측에 백 엔드 개체에 currentStatus라는 속성이 있음을 선언합니다.