您的位置:首页 > 理论基础 > 计算机网络

QT之TCP通信

2018-01-06 17:22 337 查看
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()<
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: