Qt实现tcp通信(QTcpServer和QTcpSocket的应用)详细教程

发布于:2025-06-27 ⋅ 阅读:(16) ⋅ 点赞:(0)

Qt实现tcp通信(QTcpServer和QTcpSocket的应用)详细教程

服务端

  • 监听地址和端口
    ip可以是Ipv4Any,本机地址,也可以是固定的某个ip
    端口号则作为服务端绑定的端口,客户端连接服务端时需要连接到服务端绑定的端口,端口不对连接失败

    m_server=new QTcpServer(this);
    m_server->listen(QHostAddress::AnyIPv4,serverPort);
    
  • 监听连接
    监听连接信号,当有新连接到来时会触发,可以通过nextPendingConnection()接口获取新连接来的QTcpSocket,后续通过此QTcpSocket和对应的客户端收发消息

    connect(m_server,&QTcpServer::newConnection,[this](){
        if(m_server->hasPendingConnections())
        {
            m_socket=m_server->nextPendingConnection();
        }
    });
    
  • 读写数据

    connect(m_socket,&QTcpSocket::readyRead,[this](){
                auto data=m_socket->readAll();
            });
    m_socket->write(data);//发送数据
    m_socket->flush();//可以使数据立即发送出去,无需等其他方面的调度
    

客户端

  • 连接服务端

    auto socket=new QTcpSocket(this);
    socket->connectToHost(serverIp,serverPort);
    if (socket->waitForConnected(3000)) { // 最多等待 3 秒
    	qDebug() << "Connected to server!";
    } else {
    	qWarning() << "Connection failed:" << socket->errorString();
    }
    
  • 读写数据用法同上

    connect(m_socket,&QTcpSocket::readyRead,[this](){
                	auto data=m_socket->readAll();
           	 });
    m_socket->write(data);//发送数据
    m_socket->flush();//可以使数据立即发送出去,无需等其他方面的调度
    

注意点

QTcpSocket发送的数据如果不及时读取的话,数据会堆叠在一起,下次接收时可能读取的是多次发送的数据,因此需要注意设置一些分割标识,便于堆叠数据的拆分。


网站公告

今日签到

点亮在社区的每一天
去签到