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

建设银行电商网站网站建设报告书范文

建设银行电商网站,网站建设报告书范文,临沂网站开发公司,网站建设技术合伙人的技术股份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/401150.html

相关文章:

  • 网站运营工作计划便利的龙岗网站设计
  • 凡科自助建站网站wordpress模板汉化
  • 网站建设优化推广贵州外贸生意如何做
  • 长沙h5网站建设慧聪网首页
  • 新郑做网站公司茂名手机网站建设公司名录
  • 新手学做网站 pdf在线做logo
  • 网站开发毕设的需求分析html5视频网站开发
  • 搭建网站详细步骤c2c网站建设要多少钱
  • 网站建设的进度计划书登陆官网登录入口
  • 做app推广上哪些网站招工在哪个平台最好
  • 网站视频弹窗代码建筑网方成龙
  • 蒙古文网站建设工作计划wordpress 宝宝主题
  • 珠海建站软件网站编程薪资
  • 江苏高端网站建设wordpress悬停插件
  • 建设门户网站系统的必要性网页设计兼职平台
  • 西安免费做网站价格单位邮箱怎么查询
  • 哪里找免费网站重庆建网站
  • 怎么做刷会员的网站中国建筑网络教育平台
  • 黄山北京网站建设医疗网站模板
  • 泰州住房和城乡建设厅网站首页wordpress lamp 建站
  • 万网网站搬家红河网站建设代理
  • 做网站的公司应该税率多少wordpress默认首页
  • 网站建设douyanet100m做电影网站
  • 优秀企业网站建设定制微网站在哪个平台上搭建好 知乎
  • dede免费手机网站模板佛山专业的网页制作
  • 泰安企业网站seo北京最新新闻头条
  • 商丘网站建设aliapp我做网站啦 圆通导航
  • 泉州台商区建设局网站用ps软件做ppt模板下载网站有哪些
  • 株洲网站建设 李食用油 网站 模板
  • 美妆网站设计成都广告公司排行榜