Qt下的TCP通信

TCP通信的Qt实现大概流程

Qt中的Socket通信要在.pro工程文件中添加:

QT       += network

服务端(Server)

要用到两个Qt的类:QTcpServerQTcpSocket

1、新建QTcpServer对象

2、设置监听的客户端端口

3、关联连接信号与槽(客户端连接服务器时会触发信号QTcpServer::newConnection())

4、在槽函数中,用一个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()的区别,可以按F1看帮助)

//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();

 

你可能感兴趣的:(Qt,C++)