Qt图形化与socket通信
序言
  本学期面向对象程序设计实践(C++)的课程设计作业是设计并实现宠物小精灵对战系统。其中程序本体需要采用 C/S 模式,即客户端和服务端用socket进行通信,服务端保存所有用户的信息
  本作业例程源代码Alice Archive将在作业完成后开放权限为public。先在此浅谈一下客户端与服务端使用socket进行通信的基础实现  
Socket通信
为了在项目代码当中使用<QTcpSocket>等头文件,我们首先需要在Qt项目文件.pro当中添加如下内容:
| 1 | QT += network | 
客户端
我们需要进行如下操作以实现使用QT中的QTcpSocket类与服务器进行通信:
1.在类MainWindow当中添加如下成员:
| 1 | private: | 
2.在类MainWindow构造函数当中,加入如下信息:
  创建QTcpSocket套接字对象
  指定IP与端口
| 1 | socket = new QTcpSocket(this); | 
3.当socket接收缓冲区有新数据到来时,会发出readRead()信号,因此为该信号添加槽函数以读取数据。同理设置断开连接执行的函数操作
| 1 | QObject::connect(socket, &QTcpSocket::readyRead, this, &MainWindow::readData); | 
对于接受缓冲区发来的信息执行的读取操作:
| 1 | void MainWindow::readData() | 
断开与服务器的连接:
| 1 | void MainWindow::socket_disconnected(){ | 
4.在合适的位置使用该IP与端口设置连接服务器:
| 1 | socket->connectToHost(ip, port); | 
5.使用write函数向服务器发送数据:
| 1 | QByteArray data = /***/; | 
服务器端
除了使用<QTcpSocket>,我们还需要在此使用QTcpSever
1.同理,在构造函数当中创建QTcpSever对象:
| 1 | server = new QTcpServer(this); | 
2.侦听一个端口,使得客户端可以使用这个端口访问服务器:
| 1 | int port; | 
3.当服务器被客户端访问时,会发出newConnection()信号,因此为该信号添加槽函数,并用一个QTcpSocket对象接受客户端访问:
| 1 | connect(server, &QTcpServer::newConnection, this, &TcpServer::ClientConnect); | 
4.使用socket的write函数向客户端发送数据:
| 1 | QByteArray data = /***/; | 
5.当socket接收缓冲区有新数据到来时,会发出readRead()信号,因此为该信号添加槽函数以读取数据:
| 1 | void TcpServer::ReadData(){ |