零、参考链接:
https://blog.csdn.net/weixin_43435307/article/details/107013008
https://blog.csdn.net/weixin_33860528/article/details/94117368
https://blog.csdn.net/yxy244/article/details/103510030
一、简介
在工作中经常使用网络助手,因此自己准备使用Qt
编写一个网络助手,作为学习Qt
编程的项目练习。
二、QT中TCP通信过程
项 | 解释 |
---|---|
server_l | 服务器监听套接字 |
server_c | 服务器连接套接字 |
client | 客户端套接字 |
1、服务端通信过程
1、从ui
界面中获取需要监听的ip
和port
。
2、创建监听套接字
3、开始监听
4、客户端连接以后提取连接套接字
5、使用连接套接字进行数据收发
2、客户端通信过程
1、创建客户端套接字
2、从ui
界面获取服务端ip
和port
3、连接服务器
4、连接成功后进行数据收发
三、QTcpSocket状态变化过程
蓝色矩形框代表信号产生。
四、代码实现
1、UI界面布局
1、服务端
2、客户端
2、服务端实现
1、获取ip地址列表
QHostInfo info = QHostInfo::fromName(QHostInfo::localHostName());
QList<QHostAddress> addrList = info.addresses();
for(int i=0;i<addrList.count();i++){
QHostAddress ip = addrList.at(i);
if(QAbstractSocket::IPv4Protocol == ip.protocol()){
ui->ip->addItem(ip.toString());
}
}
ui->ip->addItem("127.0.0.1");
2、创建监听套接字
tcpserver = new QTcpServer(this);
3、监听
// 获取ip
QString ip = ui->ip->currentText();
QHostAddress addr(ip);
// 获取端口号
qint16 port = ui->port->text().toInt();
// 开始监听
tcpserver->listen(addr,port);
4、提取连接套接字
// 获取连接套接字
tcpsocket = tcpserver->nextPendingConnection();
// 提取客户端ip和端口号
QString ip = tcpsocket->peerAddress().toString();
quint16 port = tcpsocket->peerPort();
5、数据接收
QByteArray data = tcpsocket->readAll();
ui->reciveText->append(data);
6、数据发送
tcpsocket->write(ui->sendText->toPlainText().toUtf8());
3、客户端实现
1、创建套接字
tcpClient = new QTcpSocket(this);
tcpClient->abort();
2、连接服务端
tcpClient->connectToHost(ui->serverIp->text(),ui->serverPort->text().toUShort());
3、数据接收
QByteArray data = tcpClient->readAll();
ui->reciveData->append(data);
4、数据发送
cpClient->write(ui->sendData->toPlainText().toUtf8());
五、测试
六、说明
以上只测试TCP通信功能,没对异常进行处理。