王青意,疾风无敌银堡垒粤语,黑衣人2高清完整版下载
网络概念
交换机和路由器
交换机
端到端转发,基于mac地址实现不同设备间的数据转发,转发速度快.
路由器
根据实际数据路线转发,基于网络ip地址实现不同网络间的数据转发
静态路由
指网络管理员配置好的转发路径,能够直接确定数据路线转发,大型和复杂的网络环境通常不宜采用静态路由,当连线一改变,则静态路由需要重新配置
动态路由
路由器根据算法自动地建立自己的路由表实现数据转发,由于需要路由器之间频繁地交换各自的路由表,从而安全保密性低.
网络协议
为数据交换而建立的规则、标准或约定的集合
协议栈
如上图所示,可以看到应用层的ftp协议是基于传输层的tcp协议来实现文件共享传输.而传输层的tcp协议则基于网络层的ip实现的
默认情况下ftp协议使用tcp端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息
tcp和udp
tcp(传输控制协议)
面向连接的协议, 主要用于大量数据的场合,比如文件传输,一个tcp连接必须要经过3次握手才能建立
然后握手完成后,便开始进行数据传输了.
为什么要第3次握手,而不是2次握手?
避免重复连接请求,如果第一次连接请求超时了, 这时客户端假如重发请求,而第一次连接请求最终还是发送到服务器了,则服务器将再次重复接受到该请求,由于服务器之前已经确定过了第3次确定请求,所以服务器可以直接抛弃不管了(假如没有第3次确认,则服务器无法避免重连)
一个tcp断连则需要4次挥手才能断开
1.客户端发送一个fin,用来关闭客户到服务器的数据传送
2.服务器收到这个fin,它发回一个ack,确认序号为收到的seq序号加1。
3.服务器关闭与客户端的连接,发送一个fin给客户端a
4.客户端发回ack报文确认,并将确认序号设置为收到序号加1
udp(用户数据报协议)
无连接的协议, 主要用于不要求分组顺序到达、少量数据的传输场合, 数据传输效率高.缺点容易掉包.
qt网络编程
qt network模块提供的类允许编写 tcp/ip clients 和 servers、以及ftp和http等常用协议(后续章节讲解ftp和http)
而qtcpsocket和qtcpserver类则是实现tcp客户端和服务器用的.
qtcpsocket
在网络编程中, qtcpsocket支持以下两种访问方式
1)异步(非阻塞)访问
异步方式通过qtcpsocket的信号与槽实现,比如当我们调用connecttohost()连接服务器时,此时并非立即连接成功,所以我们需要等待connected()信号触发后,才知道连接成功,当然也可以通过信号error()来处理与服务器的连接发生错误的异常事件.
2) 同步(阻塞)访问
通过waitforxxxx()函数实现阻塞,最好使用多线程实现,否则的话,会导致界面也会进入阻塞.
qtcpsocket同步连接服务器步骤如下:
socket->connecttohost("192.168.1.101", 8088); //连接服务器 if (socket->waitforconnected(1000)) //阻塞等待1000ms qdebug("connected!"); else return false; socket->write(data, len); //写数据 socket ->waitforbyteswritten();
socket->waitforreadyread(); //等待读取数据
qdebug()<< "received bytes:" << socket->read(buf, sizeof(buf)-1);
socket ->disconnectfromhost(); //断开连接 socket ->waitfordisconnected();
未完待续,下章来学习客户端与服务器实例
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论