QT TCP 서비스 측 클라이언트 연결 해제 판단

12016 단어 qtvs2019
1. 클라이언트가 연결을 끊으면 disconnectFromHost 함수를 실현할 수 있다.서버는 클라이언트가 연결을 끊었는지 판단합니다. 연결된 클라이언트가 되돌아오는 오류가 있는지 확인할 수 있습니다
2. 감청 코드는 주로 감청 임무를 본 컴퓨터에 연결하고 포트 번호가 10086인 클라이언트를 실현하며 연결 신호와 슬롯 함수 관계를 구축한다
void MainWindow::start_monitor()
{
    connect(&m_tcpServer,SIGNAL(newConnection()),this,SLOT(acceptConnection()));
    if(!m_tcpServer.listen(QHostAddress::Any,10086)){
        qDebug()<<m_tcpServer.errorString();
        close();
        return;
    }
     ui->textEdit->setText(" ");
}

3. 새로운 연결, 연결이 있을 때 연결된 대상을 기록하고 데이터와 오류를 받은 슬롯 함수를 구축한다
void MainWindow::acceptConnection()
{

    m_tcpServerConnection=m_tcpServer.nextPendingConnection();
    connect(m_tcpServerConnection,SIGNAL(readyRead()),this,SLOT(updateServerRead()));
    connect(m_tcpServerConnection, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(MSGError(QAbstractSocket::SocketError)));
     ui->textEdit->setText(" ");
}

4. 연결 해제 처리
void MainWindow::MSGError(QAbstractSocket::SocketError)
{
    int error = m_tcpServerConnection->error();
    switch(error)
    {
        case QAbstractSocket::RemoteHostClosedError:// 
        {
            QString hostAddress=m_tcpServerConnection->QAbstractSocket::peerAddress().toString();

            ui->textEdit->setPlainText(tr(" [%1] \r
"
).arg(hostAddress)); break; } default: { error = -1; QMessageBox::information(this, "show", m_tcpServerConnection->errorString()); break; } } }

5. 클라이언트가 종료됨
void MainWindow::btn_break_connect()
{
    m_tcpClient->disconnectFromHost();
    ui->plainTextEdit->appendPlainText(" ");
}

6. 관련 헤더 파일 부분
private:
    Ui::MainWindow *ui;

    QTcpServer m_tcpServer;
    QTcpSocket *m_tcpServerConnection;

public slots:
    void start_monitor();
    void acceptConnection();
    void updateServerRead();
    void MSGError(QAbstractSocket::SocketError);

좋은 웹페이지 즐겨찾기