qt中tcp通信流程

  1. 在pro文件中加入QT += network
  2. 在对应头文件中添加、等需要使用的头文件
  3. 客户端私有变量中定义:QTcpSocket *tcpSocket;
  4. 在cpp文件中:tcpSocket = new QTcpSocket(this);
  5. 连接: connect(tcpSocket, &QTcpSocket::connected,
    =
    {
    tcpSocket->connectToHost(QHostAddress(ipAdress),port);(获取IP地址和端口号)

可提示连接成功;

});

  1. 发送数据:tcpSocket->write(str.toUtf8().data());

  2. 接收数据:connect(tcpSocket, &QTcpSocket::readyRead,

=

{

处理接收的数据内容;

}

connect(tcpSocket,&QTcpSocket::disconnected,

=

{

tcpSocket->disconnectFromHost();

tcpSocket->close();

断开连接可提示的操作;

});

  1. 服务器端:私有变量定义:

QTcpServer *tcpServer;

QTcpSocket *tcpSocket;

  1. CPP文件中tcpServer = new QTcpServer(this); //初始化

  2. 监听套接字:tcpServer->listen(QHostAddress::Any, 8888);

  3. 取出建立好连接的套接字:connect(tcpServer,&QTcpServer::newConnection,

={

tcpSocket = tcpServer->nextPendingConnection();

QString ip = tcpSocket->peerAddress().toString();

quint16 port = tcpSocket->peerPort();

});

  1. 连接成功后读取客户端信息:

connect(tcpSocket,&QTcpSocket::readyRead,

={

QByteArray buf = tcpSocket->readAll();

读取完成后可对buf进行对应操作;

});

  1. 发送数据:tcpSocket->write(Str.toUtf8());

若TCP发送包会出现黏包情况可通过定时器延时操作避免

  1. 定时器使用:QTimer timer; //定时器

  2. connect(&timer,&QTimer::timeout,

={

Timer.stop();//关闭定时器

发送数据;

});

  1. 发送数据中设置timer.start(20);//表示定时器延时20ms。