C/C++学习)22.QTcpServer、QTcpSocket、QUdpSocket使用

摘要:
具体代码如下:1_server=newQTcpServer;2_服务器-˃侦听;创建并侦听(绑定)服务器对象后,服务器将一直侦听。客户端使用QTcpSocket创建一个Tcp通信对象与服务器通信,并使用成员函数connectToHost()启动连接操作。在服务器接收到连接请求并完成三次握手之后,连接成功。此时,服务器的QTcpServer对象将触发newConnection()信号,我们将处理该信号。在其slot函数中,我们将使用服务器创建的QTcpSocket对象在连接建立后进行通信。注意:此时,服务器有两个对象,QTcpServer和QTcpSocket对象,一个用于侦听,另一个用于通信。

一、TCP/UDP通信在Qt中的实现过程:

废话不说,首先下面是Qt中TCP/UDP的实现图解:

20170604110818507

1.Qt下TCP通信详解:

针对上图进行简单的说明:

QTcpServer用来创建服务器对象,服务器对象创建以后,调用成员函数listen()进行监听某个IP和某个端口,其中listen()包含了IP和Port(即地址和端口)。其实服务器的监听操作是用来将该服务器和某个地址以及某个端口绑定。你可以理解为Qt为了区分服务器和客户端而创造了监听操作。具体代码如下:

1     _server = new QTcpServer;
2     _server->listen(QHostAddress("127.0.0.1"), 9988);

当服务器对象创建完成,并进行了监听(绑定)后,服务器就一直在监听,而客户端用QTcpSocket创建与服务器进行通信的Tcp通信对象,使用成员函数connectToHost()进行发起连接操作,当服务器接收到连接请求完成三次握手之后,连接成功。而此时服务器的 QTcpServer 对象会触发一个 newConnection() 信号,而对该信号,我们加以处理,在其槽函数中取出建立连接后服务器端创建的用于通信的 QTcpSocket 对象(nextPendingConnection()返回这样一个对象)注意:此时服务器有两个对象,QTcpServer 和 QTcpSocket 对象,一个用来监听一个用来通信。连接成功之后,客户端也会触发一个connected()连接成功的信号。这样就可以开始进行数据传输。

当服务器的 QTcpSocket 对象和客户端的 QTcpSocket 对象进行数据交换时,发送方发送数据(write()),对端检测信号readyRead(),如果发送成功,则readyRead()信号就会被触发,此时我们只要在readyRead()信号的槽函数中实现数据的接受读取(read()、readAll()等)即可。

2、Qt Udp通信(QUdpSocket):
Udp比Tcp简单的多,因为服务器不需要进行监听,显得和客户端并无两样,只需要知道对端的IP和端口就能进行数据传输,但是却不保证一定能完成消息的抵达(这就是TCP与UDP的一个主要区别:TCP会粘包但是不会丢包,而UDP会丢包不会粘包),(我们会在测试中用同一段代码来测试客户端与服务器,因为对于单线程/进程来说其实就是没有区别)。其次,TCP与UDP的数据形式不同,所以UDP的数据接收成员函数,自然不能用TCP的简单的read、write(流式数据),而要使用readDatagram、writeDatagram。

二、TCP/UDP通信的代码测试

注意:在使用到TCP/UDP时,需要在工程文件 xxx.pro 中加上:”QT += network”

1.TCP 实现服务器端和客户端聊天(代码文件多不好贴上,如需要留言邮箱必回)

捕获

如上:服务器可以选择IP地址和端口绑定或连接(包括服务器自身和客户端),客户端可以绑定连接服务器(先服务器绑定再客户端连接)。

2.UDP实现各个用户之间聊天(代码文件多不好贴上,如需要留言邮箱必回)

捕获

文章部分引用自:https://blog.csdn.net/Apollon_krj/article/details/72857828

免责声明:文章转载自《C/C++学习)22.QTcpServer、QTcpSocket、QUdpSocket使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Delphi的类与继承Alertmanager 基础下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Nginx网络连接配置

本文记录Nginx中网络连接的设置配置项。 1)读取HTTP头部超时时间 语法:client_header_timeout time(默认单位:秒); 默认:client_header_timeout 60; 配置块: http、server、location 在与客户端建立连接之后,将开始获取HTTP头部,如果在配置的时间之内没有读取到客户端发来的字节,...

nmap的使用教程

nmap的介绍: nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。 正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。系统管理员可以利用n...

新手入门贴:史上最全Web端即时通讯技术原理详解

 关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述。而web端的IM应用,由于浏览器的兼容性以及其固有的“客户端请求服务器处理并响应”的通信模型,造成了要在浏览器中实现一个兼容性较好的IM应用,其通信过程必然是...

ubuntu iptables设置

1. 查看iptables防火墙规则sudo iptables -L2. 清除已有iptables规则iptables -F或者iptables --flush 这两条命令是等效的。有的linux不会清除NAT表中的规则,所有需要手动清除iptables -t NAT -F iptables -Xiptables –Z将所有iptables以序号标记显示,...

关于HTTP协议,一篇就够了

HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 HTTP是一个属于应用层的面向对象的协议,由于其简捷...

ZeroMQ接口函数之 :zmq_setsockopt –设置ZMQ socket的属性

ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html 本文地址 :http://www.cnblogs.com/fengbohello/p/4398953.html 翻译:郝峰波 mail : fengbohello@qq.com ZeroMQ 官方地址 :http://api....