qt 소켓 통신 예제

qt 소켓 통신 예제

1 년 이상 전에 QML에 대한 C ++ 백 엔드에 대한 기사를 작성하여 QML과 C ++간의 상호 작용에 대한 매우 기본적인 예를 보여 주었습니다. C ++/QML 상호 작용에 대해 모르는 경우 먼저 읽는 것이 좋습니다. 동기 소켓은 종종 제어흐름이 더 간단해지는 코드로 이어질 수 있습니다. 대기의 주요 단점에 대한 … () 접근 방식은 이벤트가 대기하는 동안 처리되지 않는다는 것입니다. () 기능이 차단되고 있습니다. GUI 스레드에서 사용하면 응용 프로그램의 사용자 인터페이스가 동결될 수 있습니다. 따라서 GUI가 아닌 스레드에서만 동기 소켓을 사용하는 것이 좋습니다. 동기적으로 사용되는 경우 QTcpSocket은 이벤트 루프가 필요하지 않습니다. Fortune 클라이언트 및 포춘 서버 예제는 QTcpSocket 및 QTcpServer를 사용하여 TCP 클라이언트 서버 응용 프로그램을 작성하는 방법을 보여 준다. 이벤트 루프를 사용하지 않고 별도의 스레드에서 동기 QTcpSocket을 사용하는 방법에 대한 예제는 Fortune 클라이언트 차단 및 활성 클라이언트당 하나의 스레드가 있는 다중 스레드 TCP 서버의 예는 스레드 포춘 서버를 참조하십시오. 인코딩 된 행운은 QTcpSocket::write()를 사용하여 작성되며 QTcpSocket이 네트워크에 재산을 작성한 후 연결을 닫을 QTcpSocket::disconnectFromHost()라고 합니다. QTcpSocket은 비동기적으로 작동하기 때문에 이 함수가 반환된 후 데이터가 기록되고 컨트롤이 Qt의 이벤트 루프로 돌아갑니다.

그러면 소켓이 닫히면 QObject::deleteLater()가 삭제됩니다. 심지어 여러 클라이언트가있을 수 있습니다 – 서버는 그들 각각에 대해 별도의 소켓을 만들 것입니다 :이 슬롯의 목적은 행운의 목록에서 임의의 줄을 선택하고 QDataStream을 사용하여 QByteArray로 인코딩 한 다음 연결 소켓에 쓰는 것입니다. 이것은 QTcpSocket을 사용하여 이진 데이터를 전송하는 일반적인 방법입니다. 먼저 QByteArray 및 QDataStream 개체를 만들어 바이트배열을 QDataStream의 생성자로 전달합니다. 그런 다음 QDataStream의 프로토콜 버전을 QDataStream::Qt_4_0으로 명시적으로 설정하여 Qt의 이후 버전에서 클라이언트와 통신할 수 있도록 합니다(QDataStream:setVersion()참조). QUdpSocket:bind()는 TCP 서버의 QTcpServer::listen()와 같이 들어오는 데이터그램을 수락하기 위해 소켓을 준비합니다. 하나 이상의 데이터그램이 도착할 때마다 QUdpSocket은 readyRead() 신호를 방출합니다. QUdpSocket::readDatagram()을 호출하여 데이터그램을 읽습니다. 이 예제에서는 Qt를 사용 하 고 네트워크 프로그래밍의 기본 측면을 보여 줍니다. Fortune Server 예제에서는 간단한 네트워크 서비스를 위한 서버를 만드는 방법을 보여 주며 있습니다.

그런 다음 QTcpServer::newPendingConnection()을 호출하여 연결의 서버 측을 나타내는 QTcpSocket을 반환합니다. QTcpSocket::d연결()을 QObject::deleteLater()에 연결하면 연결을 끊은 후 소켓이 삭제됩니다. Threaded Fortune Server 예제에서는 스레드를 사용하여 다른 클라이언트의 요청을 처리하는 간단한 네트워크 서비스에 대한 서버를 만드는 방법을 보여 주며 있습니다. 포춘 클라이언트 예제와 함께 실행됩니다. UDP(사용자 데이터그램 프로토콜)는 가볍고 신뢰할 수 없는 데이터그램 지향, 연결없는 프로토콜입니다. 안정성이 중요하지 않은 경우에 사용할 수 있습니다. 예를 들어 하루 중 시간을 보고하는 서버는 UDP를 선택할 수 있습니다. 하루 중 시간이 있는 데이터그램이 손실되면 클라이언트는 단순히 다른 요청을 할 수 있습니다. 브로드캐스트 발신자 및 브로드캐스트 수신기 예제에서는 Qt를 사용하여 UDP 발신자와 UDP 수신기를 작성하는 방법을 보여 준다.