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

网站建设的基本教程网站seo啥意思

网站建设的基本教程,网站seo啥意思,商城网站建设流程图,wordpress参考TCP 通信流程服务器客户端 TCP 在 Qt 中,QTcpServer 和 QTcpSocket 是用于实现 TCP 网络通信的核心类。QTcpServer 用于创建 TCP 服务器,监听客户端的连接请求;QTcpSocket 用于实现客户端和服务器之间的数据传输。 通信流程 服务器 创建套…
  • TCP
    • 通信流程
    • 服务器
    • 客户端

TCP

在 Qt 中,QTcpServer 和 QTcpSocket 是用于实现 TCP 网络通信的核心类。QTcpServer 用于创建 TCP 服务器,监听客户端的连接请求;QTcpSocket 用于实现客户端和服务器之间的数据传输。

通信流程

服务器

  1. 创建套接字服务器QTcpServer对象
  2. 通过QTcpServer对象设置监听,即:QTcpServer::listen()
  3. 基于QTcpServer::newConnection()信号检测是否有新的客户端连接
  4. 如果有新的客户端连接调用QTcpSocket *QTcpServer::nextPendingConnection()得到通信的套接字对象
  5. 使用通信的套接字对象QTcpSocket和客户端进行通信
#include "mainwindow.h"#include "ui_mainwindow.h"#include<QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);tcpserver = new QTcpServer(this);}MainWindow::~MainWindow(){delete ui;}void MainWindow::on_openBt_clicked(){quint16 port = ui->portEdit->text().toUInt();  // 获取端口号if (port == 0 || port > 65535) {QMessageBox::warning(this, "错误", "端口号无效!");return;}if (!tcpserver->listen(QHostAddress::Any, port)) {QMessageBox::warning(this, "错误", "服务器启动失败!");return;}QMessageBox::information(this, "成功", "服务器已启动!");connect(tcpserver, &QTcpServer::newConnection, this, [=]() {QTcpSocket *socket = tcpserver->nextPendingConnection();clientSockets.append(socket);  // 将新客户端 socket 加入列表// 处理客户端数据connect(socket, &QTcpSocket::readyRead, this, [=]() {QByteArray data = socket->readAll();ui->recvEdit->appendPlainText("客户端 say:" + data);});// 处理客户端断开连接connect(socket, &QTcpSocket::disconnected, this, [=]() {clientSockets.removeOne(socket);  // 从列表中移除socket->deleteLater();  // 释放资源});});}void MainWindow::on_sendBt_clicked(){// 获取输入框中的文本QString str = ui->sendEdit->text();  // 假设 sendEdit 是 QLineEditif (str.isEmpty()) {QMessageBox::warning(this, "错误", "发送内容不能为空!");return;}// 将 QString 转换为 QByteArrayQByteArray data = str.toUtf8();// 遍历所有客户端 socket,发送数据for (QTcpSocket *socket : clientSockets) {if (socket->state() == QAbstractSocket::ConnectedState) {// 是用于检查 QTcpSocket 是否处于连接状态的条件。socket->write(data);  // 发送数据}}// 清空输入框ui->sendEdit->clear();}void MainWindow::on_closeBt_clicked(){// 关闭服务器,停止监听tcpserver->close();// 断开所有客户端连接for (QTcpSocket *socket : clientSockets) {if (socket->state() == QAbstractSocket::ConnectedState) {socket->disconnectFromHost();  // 断开连接}socket->deleteLater();  // 释放资源}// 清空客户端列表clientSockets.clear();// 更新 UI 状态QMessageBox::information(this, "成功", "服务器已关闭!");ui->recvEdit->appendPlainText("服务器已关闭!");}

头文件

#include <QTcpServer>#include <QTcpSocket>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_openBt_clicked();void on_sendBt_clicked();void on_closeBt_clicked();private:Ui::MainWindow *ui;QTcpServer *tcpserver;QList<QTcpSocket*> clientSockets;  // 保存所有客户端连接的 socket 列表};

客户端

  1. 创建通信的套接字类QTcpSocket对象
  2. 使用服务器端绑定的IP和端口连接服务器QAbstractSocket::connectToHost()
  3. 使用QTcpSocket对象和服务器进行通信
#include "ui_mainwindow.h"#include<QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this);tcpsocket = new QTcpSocket(this);// 连接 socket 的信号和槽connect(tcpsocket, &QTcpSocket::connected, this, [=]() {QMessageBox::information(this, "成功", "已连接到服务器!");ui->recvEdit->appendPlainText("已连接到服务器!");});connect(tcpsocket, &QTcpSocket::disconnected, this, [=]() {QMessageBox::information(this, "提示", "已断开与服务器的连接!");ui->recvEdit->appendPlainText("已断开与服务器的连接!");});connect(tcpsocket, &QTcpSocket::readyRead, this, [=]() {QByteArray data = tcpsocket->readAll();ui->recvEdit->appendPlainText("服务器 say: " + QString::fromUtf8(data));});}MainWindow::~MainWindow(){delete ui;}void MainWindow::on_connect_clicked(){// 获取服务器地址和端口号QString address = ui->IPEdit->text();quint16 port = ui->portEdit->text().toUInt();if (address.isEmpty() || port == 0) {QMessageBox::warning(this, "错误", "服务器地址或端口号无效!");return;}// 连接到服务器tcpsocket->connectToHost(address, port);// 检查连接状态if (!tcpsocket->waitForConnected(1000)) {QMessageBox::warning(this, "错误", "连接服务器超时!");}}void MainWindow::on_disconnect_clicked(){// 断开与服务器的连接if (tcpsocket->state() == QAbstractSocket::ConnectedState) {tcpsocket->disconnectFromHost();}}void MainWindow::on_sendBt_clicked(){// 获取输入框中的文本QString str = ui->sendEdit->text();  // 假设 sendEdit 是 QLineEditif (str.isEmpty()) {QMessageBox::warning(this, "错误", "发送内容不能为空!");return;}// 将 QString 转换为 QByteArrayQByteArray data = str.toUtf8();// 发送数据if (tcpsocket->state() == QAbstractSocket::ConnectedState) {tcpsocket->write(data);} else {QMessageBox::warning(this, "错误", "未连接到服务器!");}// 清空输入框ui->sendEdit->clear();}

头文件

#include <QTcpSocket>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_sendBt_clicked();void on_connect_clicked();void on_disconnect_clicked();private:Ui::MainWindow *ui;QTcpSocket* tcpsocket;  // 保存所有客户端连接的 socket 列表};

 

作者: 苏丙榅
链接: 基于TCP的Qt网络通信 | 爱编程的大丙
来源: 爱编程的大丙
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

http://www.dtcms.com/a/451287.html

相关文章:

  • 网站开发调查表青岛网站建设免费
  • 网站开发工作周记深圳网站建设 联雅
  • 光全息|偏振复用的动态彩色全息
  • 网站设计论文大全淮南建设局网站备案
  • 横沥网站建设金属材料网站建设
  • 安装失败:安装无效或不兼容
  • 深圳住建网站win7 做服务器开网站
  • 安阳网站设计哪家专业手机大全及价格
  • 晚上网站推广软件免费版简单的网页制作软件
  • 网站快排是怎么做的企业邮箱注册步骤
  • 网站建设合同要缴纳印花税吗怎么建设一个电影资源网站解析
  • 网站做百度推广多少钱上海做网站的公司哪个好
  • 无锡网站策划企业信息公示管理系统河南
  • 低代码建站平台北京市建设信息网站
  • 建设网站什么软件好百度经验官网入口
  • 网站模板版权wordpress-4.5.2-zh_cn 安装要求
  • 品牌宣传策略如何优化网站首页
  • 重庆seo网站排名成都网站建设 Vr功能 卓 公司
  • 阿里云网站建设方案书填写特优项目网站建设方案
  • wordpress网站背景科技有限公司的经营范围
  • U536193 八数码
  • 常规FA的工业镜头有哪些?能做什么?
  • 自己做网站 需要会什么6vs做网站创建项目时选哪个
  • 济南seo网站优化古典网站建设欣赏
  • 网站标题如何书写财经网站建设方案
  • 建设一个国外服务器的网站新开传奇网站999新服网
  • 建设银行网站官网网址wordpress内容折叠
  • wordpress 网站 上传蚂蚁币是什么网站建设
  • 音乐网站开发开发好看的页面
  • 【PyTorch】基于YOLO的多目标检测(二)