QT实现简单TCP通信

 更新时间:2022年08月19日 15:18:14   作者:强迫症高级患者  
这篇文章主要为大家详细介绍了QT实现简单的TCP通信,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了QT实现简单TCP通信的具体代码,供大家参考,具体内容如下

开发环境:win7
开发软件:Qt5.5.0
下图是实现效果

首先点击客户端的connect与服务器连接,连接成功后再服务器会显示“成功连接”,然后在客户端会显示“成功与服务器建立连接”,然后我们就可以分别在服务器和客户端向对方发送数据了。

1 TCP介绍

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

在QT中的网络编程的过程如下:服务器有两个套接字,一个负责监听(QTcpServer),另一个负责通信(QTcpSocket),而客户端只有一个负责通信的套接字(QTcpSocket)。

通信过程如下图:

2 Tcp服务器实现

//监听套接字,指定父对象,让其自动回收空间
tcpServer = new QTcpServer(this);
tcpServer->listen(QHostAddress::AnyIPv4, 6000);

当有新的连接建立时,在服务器界面接收区处显示客户端地址和端口,并且等待数据发送过来,接收并显示:

connect(tcpServer, &QTcpServer::newConnection,
            [=](){
                //取出建立好连接的套接字
                //cout << "有新的客户端进行连接";
                tcpSocket = tcpServer->nextPendingConnection();
                //获取对方的IP和端口
                QString ip = tcpSocket->peerAddress().toString();
                quint16 port = tcpSocket->peerPort();
                QString temp = QString("[%1:%2]:成功连接").arg(ip).arg(port);        
                ui->textEditRead->setText(temp);
                
                connect(tcpSocket, &QTcpSocket::readyRead,
                        [=](){
                            //cout << "有数据从客户端发过来";
                            //从通信套接字取出内容
                            QByteArray array = tcpSocket->readAll();
                            ui->textEditRead->append(array);
                        }
                        );
            }
            );
}

发送数据:

void ServerWidget::on_buttonSend_clicked()
{
    if(NULL == tcpSocket){
        return;
    }
    //获取编辑区内容
    QString str = ui->textEditWrite->toPlainText();
    //给对方发送数据。使用套接字是tcpSocket
    tcpSocket->write(str.toUtf8().data());
}

点击close按钮,如果tcpSocket没有分配内存,则退出,否则断开连接。

void ServerWidget::on_buttonClose_clicked()
{
    if(NULL == tcpSocket){
        return;
    }
    //主动和客户端断开连接
    tcpSocket->disconnectFromHost();
    tcpSocket->close();
    tcpSocket = NULL;
}

3 TCP客户端实现

分配空间,指定父对象

tcpSocket = new QTcpSocket(this);

如果服务器发送连接成功,则客户端显示“成功与服务器建立连接”。

connect(tcpSocket, &QTcpSocket::connected,
            [=](){
                ui->textEditRead->setText("成功与服务器建立连接");
            }
            );

客户端读取数据,并显示在接收区

connect(tcpSocket, &QTcpSocket::readyRead,
            [=](){
                //获取服务器发送的内容
                QByteArray array = tcpSocket->readAll();
                ui->textEditRead->append(array);
            }
            );

按下connect按钮,主动与服务器建立连接

void ClientWidget::on_pushButtonConnect_clicked()
{
    //获取服务器ip和端口
    QString ip = ui->lineEditIP->text();
    quint16 port = ui->lineEditPort->text().toInt();
    //主动和服务器建立连接
    tcpSocket->connectToHost(QHostAddress(ip), port);
}

按下send按钮,发送数据,转成utf-8格式

void ClientWidget::on_pushButtonSend_clicked()
{
    if(NULL == tcpSocket){
        return;
    }
    //获取编辑区内容
    QString str = ui->textEditWrite->toPlainText();
    //给对方发送数据,使用套接字是tcpSocket
    tcpSocket->write(str.toUtf8().data());
}

按下close关闭连接

void ClientWidget::on_pushButtonClose_clicked()
{
    tcpSocket->disconnectFromHost();
    tcpSocket->close();
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C语言计算连续无序数组中缺省数字方法详解

    C语言计算连续无序数组中缺省数字方法详解

    这篇文章主要介绍了C语言计算连续无序数组中缺省数字方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • Microsoft Visual C++ 6.0开发环境搭建教程

    Microsoft Visual C++ 6.0开发环境搭建教程

    这篇文章主要为大家详细介绍了Microsoft Visual C++ 6.0开发环境搭建教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 详解C++基础——类继承

    详解C++基础——类继承

    这篇文章主要介绍了C++类继承,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 浅谈C++中字符串输入get与getline的区别

    浅谈C++中字符串输入get与getline的区别

    这篇文章主要介绍了C++中字符串输入get与getline的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • C语言实现三子棋程序

    C语言实现三子棋程序

    这篇文章主要为大家详细介绍了C语言实现三子棋程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C语言常见的指针笔试题解析

    C语言常见的指针笔试题解析

    在我们学习指针之后,应该在实际应用中去理解和掌握它,毕竟实践才是检验真理的唯一标准,我们以后在找工作的过程中免不了会遇到与指针相关的试题,本篇文章可以帮助我们提前了解一些常见的指针考点,需要的可以了解一下
    2022-10-10
  • 嵌入式C语言二级指针在链表中的应用

    嵌入式C语言二级指针在链表中的应用

    这篇文章主要为大家介绍了嵌入式C语言二级指针在链表中的应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • C++异常使用详解(看这一篇就够了)

    C++异常使用详解(看这一篇就够了)

    C++中的异常是指在程序执行过程中发生错误,导致程序无法正常运行的情况,下面这篇文章主要给大家介绍了关于C++异常使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 深入理解C语言的new[]和delete[]

    深入理解C语言的new[]和delete[]

    new和delete既是C++中的关键字也是一种特殊的运算符。这篇文章主要介绍了C++的new和delete详解,需要的朋友可以参考下
    2021-09-09
  • TypeScript的函数定义与使用案例教程

    TypeScript的函数定义与使用案例教程

    这篇文章主要介绍了TypeScript的函数定义与使用案例教程,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论