大概会花三到四篇博客去讲关于QT里面网络通信的内容,其实不能说是QT的网络通信,不管什么语言,其实都是差不多,本质在于实现的方法不同,通信的机制都是一样的
第一篇:关于网络通信的基础知识
网络通信概述:网络编程是万物互联的基础,目前用到的TCP/IP协议,它本身是分为四层:应用层、传输层、网际层、网络接口层。但是作为普通程序员,我们写程序的时候也只是用到了传输层和应用层。现在常见的网络通信协议主要包括:TCP UDP FTP HTTP,无论是在window还是Linux,系统都提供了统一的套接字,也就是常说的socket,在QT中,QT已经封装了网络模块QtNetwor,这个集成度非常高,基本可满足基本的需要。
传输控制协议(transmission control protocol ,TCP)是一种可靠、面向连接、面对数据流的传输协议,HTTP、FTP都有TCP的影子,TCP协议适合连续的数据传输,也是对数据安全性有保证的传输。
TCP工作原理:TCP协议能够提供可靠的通信连接,使得我的计算机发出的字节流能够毫无差错的送到到网络上指定的其它计算机,它的可靠性主要是因为它的请求----应答这一套安全的机制,这��ҵ���б�С����� �ƽ�Ͷ�ʹ�˾ ���ϻƽ�并不是简单的一次请求和应答,而是复杂的连接过程,如下图:
关于三次握手和四次挥手更是重点,这里面主要是大概介绍通信的机制,关于tcp连接的三次握手和四次挥手下次再补充到其它的博客。
首先启动服务器,一段时间后启动客户端,它与此服务器经过三次握手后建立连接。此后的一段时间内,客户端向服务器发送一个请求,服务器处理这个请求,并为客户端发回一个响应。这个过程一直持续下去,直到客户端为服务器发一个文件结束符,并关闭客户端连接,接着服务器也关闭服务器端的连接,结束运行或等待一个新的客户端连接。
由于复杂的通信过程,所以在通信速度上肯定是要慢于UDP通信的。
UDP:
用户数据报协议(User Data Protocol, UDP)是一一种简单轻量级、不可靠、面向数据报、
无连接的传输层协议,可以应用在可靠性不是十分重要的场合,如短消息、广播信息等。
适合应用的情况有以下几种:
●网络数据大多为短消息;
●拥有大量客户端;
●对数据安全性无特殊要求;
●网络负担非常重,但对响应速度要求高。
这个就很明显了,举个例子:QQ和微信完全符合上面的应用场合。
工作原理:UDP客户端向UDP服务器发送一定长度的请求报文,报文大小的限制与各系统的协议实现有关,但不得超过其下层IP协议规定的64KB; UDP服务器同样以报文形式作出响应。如果服务器未收到此请求,客户端不会进行重发,因此报文的传输是不可靠的。
通信流程:
客户端不用与服务器建立连接,只负责向服务器发送报文数据,当然服务器也不用去管理客户端是否连接,只需要去监听客户端即可。