QT TCP 클라이언트와 서버의 구현 절차

6897 단어 QT

클라이언트


(1) QTcpSocket 소켓 객체 만들기
socket = new QTcpSocket();

(2) 이 대상을 사용하여 서버 연결
socket->connectToHost(IP, port);

(3) write 함수로 서버에 데이터 전송
socket->write(data);

(4) socket 수신 버퍼에 새로운 데이터가 왔을 때readRead () 신호를 보냅니다. 따라서 이 신호에 슬롯 함수를 추가하여 데이터를 읽습니다.
QObject::connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);
 
void MainWindow::socket_Read_Data()
{
    QByteArray buffer;
    // 
    buffer = socket->readAll();
}

(5) 서버와의 연결 끊기 (close () 와 disconnectFromHost () 의 차이점에 대해 F1 도움말 보기)
socket->disconnectFromHost();

서버


1. 서버는 QTcpSocket 클래스 외에 QTcpSever 클래스도 사용해야 한다.그럼에도 불구하고 클라이언트보다 조금 복잡할 뿐, 6단계가 걸렸다.
(1) QTcpSever 객체 만들기
server = new QTcpServer();

(2) 클라이언트가 이 포트를 사용하여 서버에 접근할 수 있도록 포트를 정탐한다
server->listen(QHostAddress::Any, port);

(3) 서버가 클라이언트에 접근할 때 newConnection() 신호가 전송되므로 이 신호에 슬롯 함수를 추가하고 QTcpSocket 대상으로 클라이언트 접근을 받습니다
connect(server,&QTcpServer::newConnection,this,&MainWindow::server_New_Connect);
 
void MainWindow::server_New_Connect()
{
    // 
    socket = server->nextPendingConnection();
}

(4) socket의 write 함수를 사용하여 클라이언트에게 데이터 보내기
socket->write(data);

(5) socket 수신 버퍼에 새로운 데이터가 왔을 때readRead () 신호를 보냅니다. 따라서 이 신호에 슬롯 함수를 추가하여 데이터를 읽습니다.
QObject::connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);
 
void MainWindow::socket_Read_Data()
{
    QByteArray buffer;
    // 
    buffer = socket->readAll();
}

(6) 정탐 취소
server->close();

좋은 웹페이지 즐겨찾기