QtでのTCP通信

2378 ワード

TCP通信のQt実現大まかな流れ
QtのSocket通信は.Proエンジニアリングファイルに追加:
QT       += network

サービス側(Server)
QTcpServerとQTcpSocketの2つのQtクラスを使用するには
1、QTcpServerオブジェクトの新規作成
2、傍受するクライアントポートの設定
3、接続信号とスロットを関連付ける(クライアントがサーバーを接続する時、信号QTcpServer::newConnection()をトリガする)
4.スロット関数において、クライアントアクセスを1つのQTcpSocketオブジェクトで受ける(nextPendingConnection()
5.関連読取信号とスロット(socket受信バッファに新しいデータが来るとreadRead()信号を出す)
6.スロット関数でread()関数でデータを取得する
7、write()関数でクライアントにデータを送る
8、リスニングを取り消す
//1、  QTcpServer  
//     ,     ,        
tcpServer = new QTcpServer(this);

//2、          
tcpServer->listen(QHostAddress::Any, (int)port)

//3、        
connect(tcpServer, &QTcpServer::newConnection, this, &MainWindow::server_New_Connect);

void server_New_Connect()
{
    //4、     ,   QTcpSocket         ,           
    socket = tcpServer->nextPendingConnection();
    //5、  QTcpSocket    ,      
    connect(socket, &QTcpSocket::readyRead, this, &MainWindow::socket_Read_Data);
    connect(socket, &QTcpSocket::disconnected, this, &MainWindow::socket_Disconnected);
}

//6、     ,  read()      
void socket_Read_Data()
{
    //        (   ,    )
    char buffer[1024] = {0};
    socket->read(buffer, 1024);
    if( strlen(buffer) > 0)
    {
        QString showNsg = buffer;
        ui->m_recvDataTextEdit->append(showNsg);
    }
}

//7、  write( )          
char sendMsgChar[1024];
socket->write(sendMsgChar, strlen(sendMsgChar));

//8、    
tcpServer->close();




クライアント(client)
クライアントのコードはサーバより少し簡単で、QTcpSocketを使います
1、QTcpSocketソケットオブジェクトの作成
2、接続サーバー(connectToHost(IP,port))
3、write()関数を使ってサーバーにデータを送る
4、関連読取信号とスロット(socket受信バッファに新しいデータが来るとreadRead()信号を出す)
5、サーバーとの接続を切断する(close()とdisconnectFromHost()の違いについては、F 1でヘルプを見ることができます)
//1、  QTcpSocket     
socket = new QTcpSocket();

//2、     (connectToHost(IP, port))
socket->connectToHost(IP, port);


//3、  write( )          
socket->write(data);

//4、        ( socket            ,   readRead()  )
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();