Qt如何实现tcp通信?

2017-10-16 07:39:03  阅读 261 次 评论 0 条

    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"   


相关文章:

Qt如何实现tcp通信?(二)


本文地址:http://fearlazy.com/index.php/post/34.html
版权声明:本文为原创文章,版权归 fearlazy 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?