QT之TCP通信

本文详细介绍了如何使用QT进行TCP通信,包括服务器和客户端的创建、连接、数据发送与接收。服务器通过QTcpServer监听并接受客户端QTcpSocket的连接,利用write方法发送数据,并响应readyRead信号读取数据。客户端则通过QTcpSocket对象连接服务器,同样使用write方法发送数据。文中还提及了服务器与客户端的多连接处理和掉线检测。同时,文章涉及了QT项目中容器的使用方法,包括对象的添加、查找和删除操作。
摘要由CSDN通过智能技术生成

QT中可以通过TCP协议让服务器和客户端之间行通信。所以下面我就围绕服务器和客户端来写。

这是我们写服务器和客户端的具体流程:

A、服务器:

1.创建QTcpServer对象
2.启动服务器(监听)调用成员方法listen(QHostAddress::Any,端口号)
3.当有客户端链接时候会发送newConnection信号,触发槽函数接受链接(得到一个与客户端通信的套接字QTcpSocket)
4.QTcpsocket发送数据用成员方法write,
5.读数据当客户端有数据来,QTcpSocket对象就会发送readyRead信号,关联槽函数读取数据

B、客户端 :

1.创建QTcpSocket对象
2.链接服务器connectToHost(QHostAddress("ip"),端口号)
3.QTcpsocket发送数据用成员方法write,
4.读数据当对方有数据来,QTcpSocket对象就会发送readyRead信号,关联槽函数读取数据

我们需要调用到的头文件有两个:

#include <QTcpServer>  
#include <QTcpSocket>

我们先要在工程文件中加入network

QT       += core gui network

下面我们来看看服务器程序步骤:

1、初始化服务器server对象

mServer = new QTcpServer();

2、启动监听服务器

  mServer->listen(QHostAddress::Any,9988);//9988为端口号

3、当有客户端链接时候会发送newConnection信号,触发槽函数接受链接(得到一个与客户端通信的套接字QTcpSocket)

 connect(mServer,SIGNAL(newConnection()),this,SLOT(new_client()));
 mSocket = mServer->nextPendingConnection();//与客户端通信的套接字

4、发送数据

 mSocket->write(msg.toUtf8());

5、读数据当客户端有数据来,QTcpSocket对象就会发送readyRead信号,关联槽函数读取数据

 connect(mSocket,SIGNAL(readyRead()),this,SLOT(read_client_data()));

6、连接多个客户端

 //可以实现同时读取多个客户端发送过来的消息
 QTcpSocket *obj = (QTcpSocket*)sender();

7、检测掉线

 connect(mSocket,SIGNAL(disconnected()),this,SLOT(client_dis())); //检测掉线信号

下面是服务器的实现的具体代码:

 1 #include "tcpserver.h"
 2 #include "ui_tcpserver.h"
 3 #include <QDebug>
 4 TcpServer::TcpServer(QWidget *parent) :
 5     QMainWindow(parent),
 6     ui(new Ui::TcpServer)
 7 {
 8     ui->setupUi(this);
 9     //初始化服务器server对象
10     mServer = new QTcpServer();
11     //关联客户端连接信号newConnection
12     connect(mServer,SIGNAL(newConnection()),this,SLOT(new_client())); //连接客户端
13     //启动服务器监听
14     mServer->listen(QHostAddress::Any,9988);
15 
16 }
17 
18 TcpServer::~TcpServer()
19 {
20     delete ui;
21 }
22 
23 void TcpServer::new_client()
24 {
25     qDebug()<<"新客户段连接";
26     mSocket = mServer->nextPendingConnection();//与客户端通信的套接字
27     //关联接收客户端数据信号readyRead信号(客户端有数据就会发readyRead信号)
28     connect(mSocket,SIGNAL(readyRead()),this,SLOT(read_client_data()));
29     //检测掉线信号
30     connect(mSocket,SIGNAL(disconnected()),this,SLOT(client_dis()));
31 
32 }
33 
34 void TcpServer::read_client_data()
35 {
36     //可以实现同时读取多个客户端发送过来的消息
37     QTcpSock
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值