Qt如何实现tcp通信?
Qt使用QTcpServer和QTcpSocket实现tcp的通信。
一、思路:
1.服务端:QTcpServer启动监听(地址和端口)
2.客户端:QTcpSocket连接至服务端监听的端口。
3.服务端:创建一个QTcpSocket与客户端的QTcpSocket通信。
二、 具体步骤:
服务端
1.创建QTcpServer对象server.
2.server启动监听listen();
3.连接server的newConnection信号,服务端接收到新的连接触发该信号。(根据情况这一步可放在第2步前)
4.在第三步连接的槽函数中获取sever创建的QTcpSocket对象。QTcpSocket* socket = server->nextPendingConnection();
5.使用socket与客户端通信。(连接socket的readRead信号,在对应的槽函数中获取接收到的数据;使用write函数发送数据 )
客户端
1.创建QTcpSocket对象socket.
2.连接至服务端socket->connectToHost(地址,端口);
3.使用socket与客户端通信。(连接socket的readRead信号,在对应的槽函数中获取接收到的数据;使用write函数发送数据 )
三、例:
服务端,新建一个基于QWidget的最简单的工程,在pro文件中增加QT += network。
Widget类添加成员变量QTcpserver* m_server。添加一个槽函数slot_newConnection(); cpp代码如下:
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); m_server = new QTcpServer; //创建server对象 m_server->listen(QHostAddress::Any,3333); //监听 connect(m_server,SIGNAL(newConnection()),this,SLOT(slot_newConnection())); //连接信号 }
void Widget::slot_newConnection() { qDebug()<<"new connection"; QTcpSocket* socket = m_server->nextPendingConnection(); //获取socket char data[128] = "hello"; socket->write(data); //发送数据 }
客户端,新建一个机遇QWidget的最简单工程, 在pro文件中增加QT += network。
Widget类添加成员变量QTcpSocket* m_socket。槽函数slot_readReady()。cpp代码如下:
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); m_socket = new QTcpSocket; //创建socket m_socket->connectToHost("127.0.0.1",3333); //连接至主机 connect(m_socket,SIGNAL(readyRead()),this,SLOT(slot_readyRead())); //连接信号 }
void Widget::slot_readyRead() { QByteArray data = m_socket->read(256); //读取数据 qDebug()<<QString(data); //打印读取的数据 }
先启动服务端程序,后启动客户端程序运行结果:服务端打印了new connection, 客户端打印了"hello"
相关文章: