QT之TCP通信

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

include

我们先要在工程文件中加入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 
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 QTcpSocket obj = (QTcpSocket)sender(); 
38 QString msg = obj->readAll(); 
39 qDebug()<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值