관리 메뉴

Value Creator의 IT(프로그래밍 / 전자제품)

#8 [QT4] Network programming - Client 본문

1. 프로그래밍/3) QT

#8 [QT4] Network programming - Client

valuecreatort 2019. 6. 14. 18:02
반응형

* QT4와 QT5의 소스코드는 호환이 되지 않으니 참고 바랍니다.

 

1. QtNetwork 모듈이 TCP/IP 클라이언트/서버를 사용할 수 있는 클래스를 제공함.

 

2. QtNetwork 모듈이 포함하는 클래스

QAbstractSocket --> QTcpSocket

 

3. QTcpSocket 클래스에서 사용하는 함수

read()

write()

readLine()

readAll()

 

((QIODevice 클래스에서 상속받은))

getChar()

putChar()

ungetChar()

 

데이터 전송 : byteWritten() 시그널을 통해 이벤트를 쉽게 호출

데이터 수신 : readyRead() 시그널을 통해 이벤트 제공

 

소켓 서비스 종료 : disconnectFromHost() 함수 호출, disconnected() 함수 호출

 

* 서버/클라이언트 간 요청과 응답을 위한 멤버 함수

waitForConnected() : 서버와 클라이언트가 연결될 때까지 블로킹

waitForReadyRead() : 새로운 데이터가 수신될 때까지 블로킹

waitForByteWritten() : 소켓으로부터 데이터가 전송될 때까지 블로킹

waitForDisconnected() : 함수는 연결이 닫힐 때까지 블로킹

 

4. Fortune Client, Fortune Server 예제(fortune : 랜덤함수 비슷하게 임의 값 도출하는 함수)

4.1 Fortune Client

 

https://doc.qt.io/archives/qt-4.8/qt-network-fortuneclient-example.html

 

Fortune Client Example | Qt 4.8

Fortune Client Example The example is intended to be run alongside the Fortune Server example or the Threaded Fortune Server example. This example uses a simple QDataStream-based data transfer protocol to request a line of text from a fortune server (from

doc.qt.io

 

Fortune Client <-> Fortune Server

클라이언트가 서버에게 메세지를 요청하면, 서버가 클라이언트에게 메세지를 내려준다.

 

데이터 전송 프로토콜 : QDataStream 사용하여 서버로부터 메세지 한 줄을 요청.

 

* 연결 절차

1) 서버로 연결하면서 fortune 요청(임의의 메세지 요청)

2) 서버는 16비트 integer 길이의 fortune 메세지 응답.

 

* QTcpSocket은 두 가지 접근 방법 제공.

1) 비동기 방식(non-blocking)

-> 제어가 Qt 루프 이벤트 반환시 스케줄되고 수행됨.

동작 완료시 신호 발생.

연결 완료시 QTcpSocket이 connected() 반환.

 

2) 동기 방식(blocking)

-> non-GUI, 멀티스레드 어플리케이션.

wiatFor...() 함수 호출 가능.

호출 스레드

 

 

 

5. 주석 달아놓은 소스코드

 

fortuneclient.zip
0.04MB

 

6. 아래는 원문

 

 

 

 

 

반응형
Comments