网络概念

  • MAC地址(硬件地址)
  • 网络IP地址(如192.168.1.101)
  • 网络端口(实现多路通信,用来给不同应用程序来区分使用,范围0~65535,比如浏览网页服务(80端口), FTP服务(21端口) )

交换机和路由器

  • 路由器在网络层,路由器可以处理TCP/IP协议,交换机不可以.
  • 交换机在中继层。路由器根据IP地址寻址,交换机根据MAC地址寻址。
  • 路由器提供防火墙的服务,具有虚拟拨号上网功能,交换机不具备这些功能。

交换机

端到端转发,基于MAC地址实现不同设备间的数据转发,转发速度快.

路由器

根据实际数据路线转发,基于网络IP地址实现不同网络间的数据转发

静态路由

指网络管理员配置好的转发路径,能够直接确定数据路线转发,大型和复杂的网络环境通常不宜采用静态路由,当连线一改变,则静态路由需要重新配置

动态路由

路由器根据算法自动地建立自己的路由表实现数据转发,由于需要路由器之间频繁地交换各自的路由表,从而安全保密性低.

 

网络协议

为数据交换而建立的规则、标准或约定的集合

协议栈

如上图所示,可以看到应用层的FTP协议是基于传输层的TCP协议来实现文件共享传输.而传输层的TCP协议则基于网络层的IP实现的

默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息

TCP和UDP

TCP(传输控制协议)

面向连接的协议, 主要用于大量数据的场合,比如文件传输,一个TCP连接必须要经过3次握手才能建立

  1. 客户端向服务器请求发送信号
  2. 服务器接收到后,向客户端发送回应信号,并提供seq序列号(表示每个数据包的编号,因为数据是被拆成多个数据包发送的).告诉客户端,你下个数据包序号从指定值开始
  3. 客户端再次发出ACK确定服务器的发送ACK请求同步要求

然后握手完成后,便开始进行数据传输了.

为什么要第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", );         //连接服务器
if (socket->waitForConnected()) //阻塞等待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();

未完待续,下章来学习客户端与服务器实例

48.QT-网络通信讲解1的更多相关文章

  1. 简单Qt网络通信

    最近要用到Qt的Socket部分,网上关于这部分的资料都比较复杂,我在这总结一下,把Socket的主要部分提取出来,实现TCP和UDP的简单通信. 1.UDP通信 UDP没有特定的server端和cl ...

  2. Qt网络通信骨架解析,QtClient QtServer QtSerialPort

    http://blog.csdn.net/Dr_Abel/article/details/52469134#t18

  3. qt之串口

                                          qt串口讲解在QT中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也使用这个 ...

  4. QT TCP/IP

    QT 网络通信(TCP/IP) 服务端: 一.监听新的客户端接入(QTcpServer) 重写函数 incomingConnection(qintptr socketDescriptor) 二.服务端 ...

  5. Qt实战之开发软件数据获取助手(eventFilter处理鼠标按下,event处理鼠标松开)

    前段时间,受朋友委托,需要做一个能够获取别人软件文本框中内容的助手.当然这需要调用win api来解决问题.一开始,我想都没想,就用getWindowText()....居然没用,好郁闷.于是查msd ...

  6. QT创建TCP Socket通信

    最近在学习QT,了解到QT可以进行SOCKET网络通信,进行学习,并建立一个简单的聊天DEMO.为了测试是否能与VS2012下的程序进行通信,在VS2012下建立一个客户端程序,进行通信测试,发现可以 ...

  7. Qt编写安防视频监控系统18-云台控制

    一.前言 云台控制是视频监控系统中必备的一个功能,对球机进行上下左右的移动,还有焦距的控制,其实核心就是控制XYZ三个坐标轴,为了开发这个模块,特意研究了各种云台控制的方法和开源库比如soap,有些厂 ...

  8. QT 托盘 hover事件捕捉

    1. QSystemTrayIcon hover事件 参考:https://stackoverflow.com/questions/21795919/how-to-catch-the-mousehov ...

  9. Rectangle 响应按键

    import QtQuick 2.4 import QtQuick.Window 2.2 Window { visible: true MainForm { anchors.fill: parent ...

  10. Qt5数据库

     对于习惯使用SQL语法的用户,QSqlQuery类提供了直接执行SQL语句并处理返回结果的方法.对于习惯使用较高层数据库接口避免使用SQL语句的用户,QSqlTableModel类和QSqlRela ...

随机推荐

  1. 跟我学SpringCloud | 第六篇:Spring Cloud Config Github配置中心

    SpringCloud系列教程 | 第六篇:Spring Cloud Config Github配置中心 Springboot: 2.1.6.RELEASE SpringCloud: Greenwic ...

  2. Ruby系列文章

    安装Ruby.多版本Ruby共存.Ruby安装慢问题 Ruby语言的一些杂项 Ruby中的常量:引号.%符号和heredoc Ruby中的数值 Ruby字符串(1):String基本用法 Ruby字符 ...

  3. 高效 MacBook 工作环境配置,超实用!

    作者:正鹏 & 隃墨 http://www.xialeizhou.com/?p=71 前言 工欲善其事,必先利其器,工具永远都是用来解决问题的,没必要为了工具而工具,一切工具都是为了能快速准确 ...

  4. python - 博客目录

    博客目录 python基础部分 函数 初识函数 函数进阶 装饰器函数 迭代器和生成器 内置函数和匿名函数 递归函数 常用模块 常用模块 模块和包 面向对象 初识面向对象 面向对象进阶 网络编程 网络编 ...

  5. Codeforces Gym101161E:ACM Tax(主席树+LCA)

    题目链接 题意 给出一棵有边权的树,然后给出q个查询,每次查询问两个结点的路径上的边的长度的中位数是多少. 思路 这道题目是用主席树(用权值当结点)和LCA来做的. 和之前做过的区间第K大类似,这道题 ...

  6. HDU 5763:Another Meaning(字符串匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=5763 Another Meaning Problem Description   As is known to ...

  7. 【Aizu - 0121】Seven Puzzle (反向bfs)

    -->Seven Puzzle 原文是日语 这里就直接写中文了  Descriptions: 7拼图由8个正方形的卡和这些卡片完全收纳的框构成.每张卡都编号为0, 1, 2, …, 7,以便相互 ...

  8. 分布式事务(3)---RocketMQ实现分布式事务原理

    分布式事务(3)-RocketMQ实现分布式事务原理 之前讲过有关分布式事务2PC.3PC.TCC的理论知识,博客地址: 1.分布式事务(1)---2PC和3PC原理 2.分布式事务(2)---TCC ...

  9. CDQZ集训DAY6 日记

    又炸了. 早上起来其他竞赛生也走了,食堂做饭做的挺潦草,但为什么四川烧麦的馅是米啊??!! 起来看题总觉得都似曾相识.第一题打完40分暴力后想拿莫队搞到70分,但发现能想到的莫队维护都是nsqrt(n ...

  10. springboot之mybatisplus,mp的简单理解

    这是一张简单的service的继承图.可以看到我们的执行类,即XxxServiceImpl的继承关系. 从上到下,ServiceImpl和BaseMapper是一个依赖关系,ServiceImpl和I ...