이 예제에서는 클라이언트 측 DTLS 연결을 구현하는 방법을 보여 줍니다. 오늘은 주제를 다시 방문하고 보다 정교한 예제를 제공하고 자합니다 – 그들 (클라이언트와 서버) 사이의 네트워크 통신이있는 두 응용 프로그램. 이 예제는 Fortune 클라이언트 예제 또는 포춘 클라이언트 차단 예제와 함께 실행됩니다. Fortune Server 예제에서는 간단한 네트워크 서비스를 위한 서버를 만드는 방법을 보여 주며 있습니다. 이 예제에서는 QTcpServer를 사용하여 들어오는 TCP 연결을 수락하고 간단한 QDataStream 기반 데이터 전송 프로토콜을 사용하여 연결을 닫기 전에 연결 클라이언트(Fortune 클라이언트 예제에서)에 자산을 작성합니다. 클라이언트 프로그램과 서버 프로그램이라는 두 가지 간단한 예제 프로그램이 제공됩니다. 둘 다 QSocket 클래스를 사용 하 고 서버는 QServerSocket 클래스를 사용 합니다. Threaded Fortune Server 예제에서는 스레드를 사용하여 다른 클라이언트의 요청을 처리하는 간단한 네트워크 서비스에 대한 서버를 만드는 방법을 보여 주며 있습니다. 포춘 클라이언트 예제와 함께 실행됩니다. 이 예제에서는 두 프로그램이 소켓을 사용하여 통신하는 방법을 보여 주어집니다. 이 예제에서는 Qt를 사용 하 고 네트워크 프로그래밍의 기본 측면을 보여 줍니다. 또한 이 예제에서는 QTcpSever의 비동기 모드를 사용하고 있습니다. QTcpServer에는 즉시 반환되는 listen() 메서드가 있습니다.

수신 대기가 성공적으로 시작되면 서버는 신호 newConnection()를 방출합니다. listen()을 호출한 후 는 waitForNewConnection() 차단 메서드(동기)를 호출하지 않습니다. 따라서 이 예제에서는 들어오는 모든 요청에 대해 newConnection() 신호를 내보리려면 이벤트 루프가 실행되어야 합니다(QEventLoop 및 QAbstractEventDispatcher). 1 년 이상 전에 QML에 대한 C ++ 백 엔드에 대한 기사를 작성하여 QML과 C ++간의 상호 작용에 대한 매우 기본적인 예를 보여 주었습니다. C ++/QML 상호 작용에 대해 모르는 경우 먼저 읽는 것이 좋습니다. 그런 다음 MyTcpServer라는 새 클래스를 만들려고 합니다. 그리고 아래 실제 코드 조각에서 이러한 모든 슬롯, 신호 및 기능을 볼 수 있습니다. .

. 아래 그림에서 볼 수 있듯이 클라이언트는 수신 포트 9999를 사용하여 텔넷을 루프백(127.0.0.1)으로 처리했으며 서버 “Hello client”에서 응답을 받았지만 연결을 끊습니다. 호스트는 문자열 형식의 IP 주소이거나 DNS 이름일 수 있습니다. Q3Socket은 필요한 경우 일반 DNS 조회를 수행합니다. 포트는 다른 라이브러리와 달리 네이티브 바이트 순서입니다. 클라이언트는 명령줄에 지정된 호스트의 서버또는 명령줄 인수를 지정하지 않으면 localhost에 연결하려고 시도합니다. 서버에 단일 줄을 보낼 수 있습니다. . 상단의 그림은 서버 스크린 샷입니다.

그것은 듣고 있었고, 그 아이디는 각각 7과 9인 두 클라이언트로부터 연결되었습니다. 서버는 해당 클라이언트에서 받은 메시지를 인쇄했습니다. 서버 스크린 샷 아래의 두 사진은 ID(7)와 ID(9)의 두 클라이언트에서 찍은 것입니다. 그들은 서버에 메시지를 메아리쳤다. main()은 MyTcpServer 인스턴스를 만든 다음 MyTcpServer 생성자가 QTcpServer를 만듭니다. 이 섹션에서는 QTcpSocket의 연속 시리즈로 Qt의 신호/슬롯 메커니즘을 사용했습니다. 이러한 내용이 없는 경우 프런트 엔드에서 현재 Status가 변경되는 시기와 값에 대해 알 수 없습니다. 이 C++ 속성 값에 따라 QML 레이블 상태가 텍스트(연결됨, 연결이 끊김됨) 및 배경색(녹색, 빨간색)을 변경합니다. 서버가 수신 대기하는 동안 클라이언트는 서버에 연결하려고 시도합니다.

다음은 서버와 클라이언트의 두 스크린 샷입니다: Qt Widgets로 작업할 때 모든 것이 이미 C++에 있으므로 주입된 백 엔드 개체를 통해 이 QML-C++ 상호 작용을 수행할 필요가 없습니다. 즉, 실제로 질문을 구걸 : 왜 심지어 귀찮게, 왜 결국 그렇게 쉽게 하기 때문에, Qt 위젯으로 모든 프로젝트를 하지? 글쎄, 조금 쉽게, 그래,하지만 다음 스크린 샷을 살펴보고 당신이 더 좋아하는 GUI, 이 하나 (Qt 위젯)를 말해:이 클래스는 들어오는 TCP 연결을 받아 들일 수 있습니다.