일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- lua install
- 엑스퍼트생일축하해
- C API
- 프리미어 영상저장
- #부동산전자거래 #부동산전자계약 #부동산계약 #부동산전자계약방법 #부동산전자계약하는법 #부동산계약방법 #부동산중개수수료 #부동산중개수수료아끼기 #부동산복비아끼기
- TCP/IP
- file read
- FILE TRANSFER
- lua for windows
- #신혼부부 #결혼준비 #신혼부부희망타운신혼부부특별공급
- 수도권주택공급
- object
- Lua
- C++ API
- 프리미어 영상변환
- 중소규모택지
- file write
- QTcpServer
- meta table
- QT TCP
- 국토교통부
- 등록임대주택
- 청량리역한양수자인192
- lua setup
- 월세
- 찾다죽는줄
- 엑스퍼트2주년
- file open
- 티몬삼겹살데이
- lua interpreter
- Today
- Total
Value Creator의 IT(프로그래밍 / 전자제품)
#9 [QT4] Network programming - Server 본문
1. QT Fortune Client 예제와 함께 실행하면 서버<->클라이언트 통신을 확인할 수 있다.
2. 이 예제에서는 QTcpServer를 사용하여 들어오는 TCP 연결을 허용하고 간단한 QDataStream 기반 데이터 전송 프로토콜을 사용하여 연결을 종료하기 전에 연결 클라이언트 (Fortune 클라이언트 예제)에 임의의 텍스트 메세지를 씁니다.
Fortune 함수는 C언어의 Random함수와 동일한 것 같습니다.
3. 예제 작동 절차 설명
//1. --> 임의의 port, 임의의 주소로 된 QTcpServer를 선언
tcpServer = new QTcpServer(this);
//2. --> 임의의 메세지를 생성한다.
fortunes << tr("You've been leading a dog's life. Stay off the furniture.")
//3. --> 임의의 메세지를 연결된 클라이언트로 보낸다.
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune()));
//4. --> 클라이언트가 서버에 연결되면, QTcpServer는 QTcpServer::newConnection() 신호를 방출한다. // newConnection 신호는 sendFortune() 슬롯을 호출한다.
void Server::sendFortune()
//5. --> QDataStream을 이용해서 QByteArray로 인코딩한다. 연결된 소켓에 랜덤한 텍스트를 쓴다. QTcpSocket을 이용해서 binary 데이터를 전송한다.
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
//6. --> 데이터 블록의 총 크기를 16비트 INTEGER 값에 저장한다. 전체 패킷 크기가 얼마인지 클라이언트가 알 수 있다.
out << (quint16)0;
out << fortunes.at(qrand() % fortunes.size());
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
//7. --> nextPendingConnection()을 사용하여 QTcpSocket을 반환한다. 소켓 연결 해제(disconnected) 후에 소켓 삭제(deleteLater)를 확인한다.
QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater()));
//8. --> 인코딩된 텍스트는 write 함수로 클라이언트에 쓰여진다.
clientConnection->write(block);
clientConnection->disconnectFromHost();
// 클라이언트에 텍스트 쓰기가 끝나면 Host연결을 종료한다.
//QTcpSocket은 비동기 적으로 작동하기 때문에 이 함수가 반환 된 후에 데이터가 쓰여지고 제어는 Qt의 이벤트 루프로 돌아갑니다.
//그러면 소켓이 닫히고 QObject :: deleteLater ()가 이를 삭제합니다.
4. 소스코드
5. 원문
'1. 프로그래밍 > 3) QT' 카테고리의 다른 글
#11 QT 유용한 사이트 모음 (0) | 2019.06.17 |
---|---|
#11 QT 네트워크 소켓 프로그래밍 해석 (0) | 2019.06.17 |
#8 [QT4] Network programming - Client (0) | 2019.06.14 |
#5 QT Creator 예제 - 계산기, 캘린더, 메모장 (0) | 2019.04.10 |
#4 QT Programming 예제(QListWidget, QComboBox, QTimer, QFileDialog, QGraphicsView, QTabWidget, QProgressBar) (0) | 2019.04.10 |