当前位置: 首页 > news >正文

详细介绍:QT初探TCP(四)

详细介绍:QT初探TCP(四)

前言:服务端实现逻辑借助epoll, 网络学习-epoll(四)

一、TCP

之前在网络的学习时,为快速理解linux网络I/O模型,客户端是借助网络调试助手,现在回过头来看看,这个网络调试助手,也是用QT进行开发的
在这里插入图片描述

这边也简单实现一个网络助手:

实现简单的收发功能

在这里插入图片描述

需要注意的是,目前要用到socket,根据QT6官方给的文档,必须要在自己项目的CMakelists.txt中,添加如下语句

在这里插入图片描述

find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(proj_name PRIVATE Qt6::Network)
  1. 连接网络功能
void Widget::on_connect_Button_clicked()
{
//如果已连接,就断开连接
if(socket->state() == QAbstractSocket::ConnectedState){
socket->disconnectFromHost();
ui->connect_Button->setText("连接网络");
return;
}
//先获取IP地址和端口号
QString server_ip = ui->server_address_lineEdit->text();
QString server_port = ui->server_port_lineEdit->text();
if(server_ip.isEmpty() || server_port.isEmpty()){
QMessageBox::warning(this, "警告", "服务器地址或端口不能为空");
return;
}else{
socket->connectToHost(QHostAddress(server_ip), server_port.toShort());
//设置按钮为“正在连接...”
ui->connect_Button->setText("正在连接...");
ui->connect_Button->setEnabled(false);
}
}
  1. 发送数据功能
void Widget::on_send_Button_clicked()
{
//如果服务器未连接,返回
if(socket->state() != QAbstractSocket::ConnectedState){
QMessageBox::warning(this, "警告", "未连接服务器");
return;
}
QString message = ui->send_textEdit->toPlainText();
if(message.isEmpty()){
QMessageBox::warning(this, "警告","发送内容不能为空");
return;
}
//开始发送数据
QByteArray ba = message.toUtf8();
socket->write(ba);
// 在接收框显示自己发送的消息
ui->receive_textBrowser->append("client: " + message);
// 清空发送框
ui->send_textEdit->clear();
}
  1. 新增一个清空接收数据的按钮
void Widget::on_clear_receive_Button_clicked()
{
ui->receive_textBrowser->clear();
}

在这里插入图片描述
***PS:***总体写下来,就简单的收发,比我想象中的代码要清晰很多,毕竟QT官方搞了这么多年,把许多细节全部封装了,提高了开发效率。

Code

http://www.wxhsa.cn/company.asp?id=1979

相关文章:

  • 近期理工类学术会议推荐 | 人工智能、工业设计、电气工程、传感器技术、环境工程等EI会议合集
  • AI访销大脑之“创建及查询数据”新玩法
  • 史上最薄iPhone 17 Air登场!极致轻薄背后藏有哪些妥协?
  • 一毛钱好友商城系统介绍
  • 网页转小程序封装机系统介绍
  • 美客分销商城小程序系统介绍
  • P12021 面包题
  • C++ - STL - 静态数组array
  • C++ - STL - 键值对 map
  • C++ - STL - 集合set
  • 大三上 大模型系统与工程 第二次课笔记 20250912
  • 批量删除所有 LXC 容器以及用户名
  • C++ - STL - 动态数组vector(矢量)
  • 彻底解决docker:docker: Get https://registry-1.docker.io/v2/: net/http: request canceled 报错
  • Transformer-和扩散模型的生成式-AI-实用指南-预览版--全-
  • 7. Job与CronJob
  • nginx反向代理正则匹配示例及nginx内置变量详解
  • mt_12
  • 完整教程:【QT】-怎么实现瀑布图
  • 【初赛】二叉树性质和遍历 - Slayer
  • 详细解析苹果iOS应用上架到App Store的完整步骤与指南
  • drawio
  • bootstrap-select插件在webpack中点击无响应
  • Kali 字体大小设置
  • 如何使用 OCR 提取扫描件 PDF 的文本(Python 实现) - E
  • 重复从网页复制文字到编辑器的Autohotkey自动化代码
  • WeakMap 应用场景与示例
  • node,nvm,nrm,npm扫盲
  • 使用 conda 懒加载的方式减少 PowerShell 的启动时间
  • 深入 Spring MVC 底层:从 DispatcherServlet 到自定义组件的全链路解析 - 实践