我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Qt中的TCP通信

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Qt中的TCP通信

一、TCP的特点

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

二、TCP适合应用的场景

TCP协议适用于要求可靠传输的应用,例如文件传输,网络数据库,分布式高精度计算系统的数据传输。

三、Qt中使用TCP通信

Qt中的TCP通信与之前所讲的UDP通信有着明显区别,使用TCP通信,就有着明确的客户端与服务器之分,服务器有两个套接字,分别是一个用于通信的通信套接字(QTcpSocket),一个是用于监听的监听套接字(QTcpServer),客户端只有一个用于通信的通信套接字(QTcpSocket),基本流程是客户端首先得向服务器发送连接请求,服务器监听到有客户端向它发送连接请求时,会触发newConnection信号,与此同时,客户端会触发connected信号,表示与服务器成功连接,两者建立好连接之后,服务器需要返回一个通信套接字用于和客户端通信,随后客户端与服务器就可以通过通信套接字来进行数据之间的通信

四、客户端与服务器通信的实现

添加网络模块

QT += network;

添加头文件

#include //通信套接字#include //监听套接字

服务器端的实现

tcpserver分配空间,指定父对象,然后开始监听

tcpserver = new QTcpServer(this); //分配空间,指定父对象tcpserver->listen(QHostAddress::Any,8888);//监听本机所有网口及8888端口号

一旦监听到有客户端发起了连接请求,服务器端触发newConnection信号,与此同时,客户端会触发connected信号,服务器返回一个建立好连接的通信套接字,当客户端发送数据时,服务器端会触发readyRead信号,取出tcpsocket中的数据,显示到窗口中,实现接收数据

客户端返回一个建立好连接的通信套接字一般使用如下函数

tcpsocket = tcpserver->nextPendingConnection();

 完整代码

connect(tcpserver,&QTcpServer::newConnection,[=] //Server监听到连接请求触发newConnection信号    {        tcpsocket = tcpserver->nextPendingConnection();//Client与Server建立连接后,Server返回一个建立好连接用于通信的套接字        QString ip = tcpsocket->peerAddress().toString();//获取对方的IP        qint16 port = tcpsocket->peerPort();//获取对方的端口        QString time= QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");//获取当前时间        ui->te_output->append(time+"\n"+QString("成功与[%1:%2]建立连接...").arg(ip).arg(port));        connect(tcpsocket,&QTcpSocket::readyRead,[=] //接收数据        {            QString message = tcpsocket->readAll();           QString time= QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");           ui->te_output->append(time + "\n"+message);        });    });

发送数据,使用write()函数,因为已经建立好了连接,所以参数可以只有一个,就是你想发送的数据

//获取用户输入的信息    QString text = ui->te_input->toPlainText();    tcpsocket->write(text.toUtf8().data());

断开连接,使用disconnectFromHost();

tcpsocket->disconnectFromHost();//主动和客户端断开连接tcpsocket->close();tcpsocket = NULL;

客户端的实现

客户端向服务器发送连接请求

第一个参数是服务器的IP地址,第二个参数是服务器的端口号

tcpsocket->connectToHost(QHostAddress(peerip),peerport);

客户端成功连接服务器,触发connected信号,触发相应槽函数

connect(tcpsocket,&QTcpSocket::connected,[=] //客户端成功建立连接后触发connected信号    {        QString str = QString("成功与[%1:%2]建立连接...").arg(peerip).arg(peerport);        QString time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");        ui->te_output->append(time+"\n"+str);    });

客户端的发送与接收数据与服务器端是相同的,就不再过多阐述了

发送数据

//获取用户输入的信息QString text = ui->te_input->toPlainText();tcpsocket->write(text.toUtf8().data());

接收数据

connect(tcpsocket,&QTcpSocket::readyRead,[=]    {       QString message = tcpsocket->readAll();       QString time= QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");       QString name = tcpsocket->peerName();       ui->te_output->append(time + "\n"+name+":"+message);    });

断开连接时tcpsocket会触发disconnected信号

 connect(tcpsocket,&QTcpSocket::disconnected,[=]    {        QString time= QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");        ui->te_output->append(time + "\n"+"与服务器断开连接...");    });

程序演示

建立连接

 互相发送数据

断开连接

 

客户端与服务器端都可以主动与对方断开连接,断开连接后,双方就不能进行通信了

我是龙木南,这篇文章对你有帮助的话~就点个赞把~

点赞关注收藏就是对我最大的支持~

来源地址:https://blog.csdn.net/m0_71741835/article/details/127613418

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Qt中的TCP通信

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java中TCP通信指的是什么

小编给大家分享一下java中TCP通信指的是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思
2023-06-14

socket通信和tcp通信的区别有哪些

本篇内容介绍了“socket通信和tcp通信的区别有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!socket通信和tcp通信的区别:1
2023-06-29

Java项目中怎么实现TCP通信

Java项目中怎么实现TCP通信?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Socket简介:Socket称为“套接字”,描述IP地址和端口。在Internet上的主机一
2023-05-31

Java网络编程 - TCP通信

文章目录 TCP通信快速入门(一发一收)编写客户端代码编写服务器代码 多发多收多发多收(同时接受多个客户端)线程池优化 TCP通信 快速入门(一发一收) TCP协议回顾: TCP是一种面向连接,安全、可靠的
2023-08-16

C语言中怎么实现TCP通信

C语言中怎么实现TCP通信,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。TCP协议TCP协议:是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定
2023-06-03

如何进行TCP通信实现

本篇文章给大家分享的是有关如何进行TCP通信实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。TCP是底层通讯协议,定义的是数据传输和连接方式的规范。TCP协议,传输控制协议(
2023-06-05

python 网络通信协议/TCP,UD

一.osi七层协议互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层协议具体内容 各层的功能简述: 【1】物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传
2023-01-30

QT5如何实现简单的TCP通信

这篇文章主要介绍“QT5如何实现简单的TCP通信”,在日常操作中,相信很多人在QT5如何实现简单的TCP通信问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”QT5如何实现简单的TCP通信”的疑惑有所帮助!接下来
2023-06-30

编程热搜

目录