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

QT tcpserver

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 服务端有QTcpServer库,封装了监听操作server = new QTcpServer();// 直接监听,内部根据传入的ip和端口进行绑定server->listen(QHostAddress::AnyIPv4, SERVER_PORT);// 对server进行新的连接信号建立信号槽connect(server, &QTcpServer::newConnection, this, &Widget::newClientHandler);}Widget::~Widget()
{delete ui;
}void Widget::newClientHandler()
{// 将获取到的新的连接套接字中获取客户端ip和端口socket = server->nextPendingConnection();ui->hostLineEdit->setText(socket->peerAddress().toString());ui->portLineEdit->setText(QString::number(socket->peerPort()));// 新的消息到来时,connect 数据read和处理信号槽函数connect(socket, &QTcpSocket::readyRead, this, &Widget::clientInfoSlot);
}void Widget::clientInfoSlot()
{ui->chatLineEdit->setText(QString(socket->readAll()));
}void Widget::on_closeButton_clicked()
{socket->close();
}
// tcpclient
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);socket = new QTcpSocket;
}Widget::~Widget()
{delete ui;
}void Widget::on_connectButton_clicked()
{// 连接服务器socket->connectToHost(ui->hostLineEdit->text(), ui->portLineEdit->text().toInt());// 连接成功后,socket会发出一个connected的信号,使用lambda作为信号槽函数connect(socket, &QTcpSocket::connected, [this](){// 打开一个新的聊天窗口,这里不能局部变量,因为新窗口需要长久显示// 在堆区申请空间,否则对象生命周期结束后就释放了// 聊天窗口需要进行发送,所以需要socket// 原来的登录窗口需要进行隐藏this->hide();Chat *ct = new Chat(socket);ct->show();});
}
// 建立连接成功后的聊天窗口
#include "chat.h"
#include "ui_chat.h"
#
Chat::Chat(QTcpSocket *socket, QWidget *parent) :QWidget(parent),ui(new Ui::Chat)
{ui->setupUi(this);this->socket = socket;
}Chat::~Chat()
{delete ui;
}void Chat::on_sendButton_clicked()
{QByteArray ba;ba.append(ui->chatLineEdit->text());socket->write(ba);
}
http://www.lryc.cn/news/161452.html

相关文章:

  • Android adb shell svc 知识详解
  • Debian12系统下LAMP环境中Nubuilder4.5的安装
  • 百度超级链BaaS服务平台调研
  • 计算机网络之TCP/IP协议第二篇:OSI参考模型详解
  • Linux内核分析与应用2-内存寻址
  • 苍穹外卖 day12 Echats 营业台数据可视化整合
  • 代码随想录算法训练营day45|70. 爬楼梯(进阶版)|322. 零钱兑换|279.完全平方数
  • 数据结构和算法(3):列表
  • 使用playright自动下载vscode已安装插件
  • 单片机语言实例:2、点亮数码管的多种方法
  • C#学习 - 初识类与名称空间
  • Python爬取电影信息:Ajax介绍、爬取案例实战 + MongoDB存储
  • JavaScript的面向对象
  • MybatisPlus 核心功能 条件构造器 自定义SQL Service接口 静态工具
  • TSN时间敏感网络
  • 【2023年数学建模国赛】C题解题思路
  • 5分钟 将“.py”文件转为“.pyd”文件
  • python 入门到精通(一)
  • AJAX (Asynchronous JavaScript And XML)异步的JavaScript 和 XML
  • 华为云云耀云服务器L实例评测|安装Java8环境 配置环境变量 spring项目部署 【!】存在问题未解决
  • 安卓多渠道打包(五)360加固walle多渠道打包
  • Jmeter 实现 mqtt 协议压力测试
  • 蓝桥杯官网练习题(凑算式)
  • 机器学习实战-系列教程5:手撕线性回归4之非线性回归(项目实战、原理解读、源码解读)
  • 【C语言基础】那些你可能不知道的C语言“潜规则”
  • android framework之Applicataion启动流程分析(三)
  • 使用Scrapy框架集成Selenium实现高效爬虫
  • Maven 和 Gradle 官方文档及相关资料的网址集合
  • docker概念、安装与卸载
  • elasticsearch访问9200端口 提示需要登陆