Qt Creator (7)————Socket通信

目录

Qt中提供的所有的Socket类都是非阻塞的。常用的用于socket通信的套接字类如下:

QTcpServer:用于TCP/IP通信,作为服务器端套接字使用

QTcpSocket:用于TCP/IP通信,作为客户端套接字使用

QUdpSocket:用于UDP通信,服务器,客户端均使用此套接字


  • TCP/IP:

                                                                                      Linux下的TCP通信过程

 

                                                                                       Qt下的TCP通信过程

 

 

服务器端

private:
    Ui::ServerWidget *ui;

    QTcpServer *tcpServer;     //监听套接字
    QTcpSocket *tcpSocket;     //通信套接字


ServerWidget::ServerWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ServerWidget)
{
    ui->setupUi(this);

    tcpServer=NULL;
    tcpSocket=NULL;

    //监听套接字,指定父对象,让其自动回收空间
    tcpServer = new QTcpServer(this);
    tcpServer->listen(QHostAddress::Any,8888);
    setWindowTitle("服务器:8888");
    connect(tcpServer,&QTcpServer::newC
### 使用 Qt Creator 开发联网版斗地主游戏 #### 项目结构规划 为了构建一个完整的在线多人斗地主游戏,合理的项目结构至关重要。通常情况下,项目会分为客户端和服务端两部分: - **服务端**负责处理玩家连接、房间管理、牌局逻辑以及数据存储等功能。 - **客户端**则主要关注用户界面设计、网络通信模块和游戏操作交互。 对于Qt框架而言,在创建新工程时可以选择`Qt Widgets Application`作为基础模板来搭建桌面应用程序;而针对服务器端可以考虑采用C++编写基于TCP/IP协议的服务程序[^1]。 #### 客户端开发要点 ##### 用户界面布局 利用Qt Designer工具快速绘制图形化操作面板,包括但不限于: - 主菜单页面:提供登录注册入口; - 游戏大厅场景:展示当前可加入的游戏列表并允许发起新的对战邀请; - 实际比赛区域:呈现桌面上摆放着扑克牌的具体位置关系及其状态变化情况等细节描述。 ```cpp // mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include "gameboard.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_actionStartGame_triggered(); private: Ui::MainWindow *ui; GameBoard* gameBoardWidget; }; #endif // MAINWINDOW_H ``` ##### 网络通讯机制 通过集成Qt Network库中的类(如QTcpSocket),能够轻松实现与远程主机之间的消息传递功能。当接收到特定指令后触发相应事件处理器完成后续动作执行流程控制工作。 ```cpp // networkmanager.cpp void NetworkManager::connectToServer(const QString& address, quint16 port){ tcpSocket->abort(); // 断开现有连接 tcpSocket->connectToHost(address,port); } bool NetworkManager::sendData(QByteArray data){ if(!tcpSocket || !tcpSocket->isOpen()) return false; qint64 bytesWritten = tcpSocket->write(data); return (bytesWritten != -1 && static_cast<qint64>(data.size()) == bytesWritten ); } ``` #### 服务端架构建议 考虑到斗地主这类棋牌游戏的特点——即存在较多并发请求且实时性要求较高,因此推荐选用多线程模型配合数据库支持的方式来进行后台部署优化方案的设计实施过程说明如下所示。 - 创建监听套接字等待客户机建立链接请求到来之后立即启动独立的工作子进程专门用于维护该次对话期间产生的所有事务往来记录直至结束为止。 - 对于每一轮游戏中涉及到的关键信息比如剩余手牌数量、叫分轮次顺序等等均需保存至持久层以便随时查询调用确保整个系统的稳定性和可靠性得到保障。 #### 数据同步策略 为了让不同设备上的参与者看到一致的画面效果,必须制定一套完善的数据更新规则以保证各节点间的信息一致性。一般做法是在每次发生重要变动时由源方主动推送最新版本给其他成员知晓,并设置超时重传机制防止丢包现象影响正常体验质量下降问题的发生概率降到最低限度内保持良好互动氛围营造积极健康的社区环境建设目标得以顺利达成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值