当前位置: 首页 > news >正文

团购网站设计比较好的源码网站

团购网站设计,比较好的源码网站,wordpress 投票功能,上海助君网络科技有限公司进行程序开发的同学#xff0c;无论Web前端开发、Web后端开发#xff0c;还是搜索引擎和大数据#xff0c;几乎所有的开发领域都会涉及到网络编程。比如我们进行Web服务端开发#xff0c;除了Web协议本身依赖网络外#xff0c;通常还需要连接数据库#xff0c;而数据库连…进行程序开发的同学无论Web前端开发、Web后端开发还是搜索引擎和大数据几乎所有的开发领域都会涉及到网络编程。比如我们进行Web服务端开发除了Web协议本身依赖网络外通常还需要连接数据库而数据库连接通常是通过网络连接数据库服务器或者数据库集群如果负载太高还要搞个缓存集群。 我们在上学的时候基本学了网络编程和网络协议。但两者之间的具体关系可能有些摸不到头脑。这里我们首先重点介绍2个概念一个概念是网络编程另外一个是协议。 我们知道网络协议是一个分层的协议族也就是是有一组协议构成从下往上各自负责各自的功能。那什么是协议呢协议的字面意思是共同计议商议。简单的理解其实就是多方进行沟通的规定。而网络协议其实就是在网络中多个计算节点进行交互、沟通的规定。如果根我们日常生活对比的话协议可以理解为语言比如汉语普通话。两个人交流如果都用不通话那么彼此都能理解对方表达的意图。例如一个人用四川话而另外一个用浙江话那沟通起来估计几乎不太可能。网络协议也是一样的通过对数据格式的规范化从而使计算机之间能够彼此明确对方的意图。 下面本文介绍一下网络编程网络编程也称为socket编程socket通常译作“套接字”但原意其实意译应该为”接口“。也就是操作系统提供给开发人员进行网络开发的API接口。这套接口通常可以参数的调整支持多种协议包括TCP、UDP和IP等等。下面本文从套接字编程和协议两方面分别详细的进行介绍。 网络编程 为了便于理解本文先从具体的内容开始也就是通过一个实例介绍一下网络编程是怎么回事。 本文将以TCP协议为例介绍网络编程和协议之前的关系。为了简单便于理解本文以Python为例进行介绍如果不了解Python编程语言关系也不大下面代码很容易理解。我们知道在网络通信中无论是BS架构还是CS架构通常分为服务端和客户端只不过BS架构中的浏览器就是客户端。因此本文的示例也包含服务端和客户端2部分的代码。代码功能很简单就是实现客户端和服务端发送字符串。 这个代码清单是服务端的代码这段代码的作用就是在服务端的某个端口建立监听并等待客户端建立连接。完成连接建立后等待客户端发送数据并将数据回传给客户端。 #!/usr/bin/env python3 #-*- coding:utf-8 -*- from socket import * from time import ctime host port 12345 buffsize 2048 ADDR (host,port) # 创建一个基于TCP协议的套接字 tctime socket(AF_INET,SOCK_STREAM) tctime.bind(ADDR) # 在指定的地址和端口监听 tctime.listen(3) while True:print(Wait for connection ...)tctimeClient,addr tctime.accept()print(connection from :,addr)while True:data tctimeClient.recv(buffsize).decode()if not data:breaktctimeClient.send(([%s] %s % (ctime(),data)).encode())tctimeClient.close() tctimeClient.close() 阅读服务端的代码可以看出主要包括socket、bind、listen、accept、recv和send几个。其中值得关注的是listen和accept两者分别用于监听端口和接受客户端的连接请求。 下面代码清单是客户端的实现这里特别的地方是有一个connect函数该函数实现与服务端建立连接。 #!/usr/bin/env python3 #-*- coding:utf-8 -*- from socket import * HOST localhost PORT 12345 BUFFSIZE2048 ADDR (HOST,PORT) tctimeClient socket(AF_INET,SOCK_STREAM) tctimeClient.connect(ADDR) while True:data input()if not data:breaktctimeClient.send(data.encode())data tctimeClient.recv(BUFFSIZE).decode()if not data:breakprint(data) tctimeClient.close() 通过上述示例代码可以看出服务端通常是被动的而客户端则要主动一些。服务端程序建立对某个端口的监听等待客户端的连接请求。客户端向服务端发送连接请求不出意外的情况下连接建立成功这时客户端和服务端之前就可以互发数据了。当然在实际生产环境中意外是经常的因此从协议和接口层面需要处理各种意外本文在协议部分将详细介绍。 另外本文实现了一个基本的客户端和服务端通信的程序这个模式的通信在实际生产中几乎不再使用。在实际生产中为了提高数据传输和处理的效率通常采用异步模式这些内容超出了本文的介绍范围后续文章会逐渐介绍。 TCP协议详解 前文说了网络协议是网络中不同计算机信息通信的语言为了实现交互这个语言就需要有一定的格式。本文以TCP协议为例进行介绍。 TCP协议是一个可靠的传输协议其可靠性表现在2方面一方面是保证数据包可以按照发送的顺序到达另外一方面是保证数据包一定程度的正确性后文详解为什么是一定程度上的正确性。其可靠性的实现则基于2点技术一点是具有一个CRC校验这样如果数据包中的某些数据出现错误可以通过该校验和发现另外一点是每个数据包都有一个序号这样就能保证数据包的顺序性如果出现错位的数据包可以请求重发。 既然说到了格式那我们先看一下TCP数据包的数据格式。如下图是TCP数据包的格式包括原端口、目的端口、序列号和标识位等等内容内容有些多看着可能有点眼花。但从大的方面理解这个数据包其实只包含2部分内容一个是包头另外一个则是具体需要传输的数据。在TCP协议的控制逻辑中包头起着最为关键的作用它是TCP协议中诸如建立连接、断开连接、重传和错误校验等各种特性的基础。 包头的其它信息的含义都比较明了本文仅仅介绍几个标志位URG、ACK、PSH、RST、SYN和FIN的含义。具体含义如下 ACK: 确认序号有效。RST重置连接SYN发起一个新连接FIN释放一个连接 连接的建立  TCP在具体传输数据之前需要建立连接。这里的连接并不是物理连接物理连接基于底层的协议已经建立完成而且TCP建立连接也是要假设底层连接已经成功TCP的连接其实是一个虚拟的逻辑的连接。简单粗暴的理解就是客户端和服务端分别记录了各自接受到的数据包的序号并且将自身设置为某种状态。在TCP协议中连接的建立通常成为3次握手从字面的概念可以看出连接的建立需要经过3次确认的过程。 TCP协议3次握手的过程如图所示初始状态客户端和服务端都处于关闭状态。主要过程分为3步 客户端发送预连接数据包 TCP的连接是由客户端主动发起建立客户端会发送一个数据包报文给服务端需要注意的是数据包中的SYN标识位为1。我们前文已经介绍如果SYN为1则说明为建立连接的数据包。同时在该数据包中包含一个请求序列号该序列号也是建立连接的依据。服务端回复连接确认 服务端确认可以建立连接服务端不一定可以建立连接因为系统中套接字的数量是有限的的情况下会向客户端发送一个应答数据包。在应答数据包中会将ACK标志位设置为1表示为服务端应答数据包。同时在应答数据包中会设置请求序列号和应答序列号的值具体参考图3.客户端回复连接确认 最后客户端再次发送一个连接确认数据包告诉服务端连接建立成功。 从上面流程可以看出连接的建立需要经过多次交互这就是我们日常中所说的建立连接是高成本的操作。在实际生产环境中为了应对这个问题会减少连接建立的频度通常的做法是建立连接池传输数据时直接从连接池中获取连接而不是新建连接。 有人可能觉得可以对建立连接的过程进行优化比如将客户端最后一次的确认取消掉觉得这个没有卵用。对于正常情况确实没有多大的作用这里主要是应对异常情况。因为网络拓扑是非常复杂的特别是在广域网中有着数不清的网络节点因此会出现各种异常情况。因此TCP协议在设计的时候必须要保证异常情况下的可靠性。 我们这里举一个例子就是连接请求超时的情况。假设客户端向服务端发送一个连接请求由于各种原因请求一直没有到达服务端因此服务端也就没有回复连接确认消息。客户端连接超时因此客户端重新发送一个连接请求到服务端这次比较顺利很快到达了并且顺利建立了连接。之后前一个数据包经过长途跋涉最终还是到了服务端服务端也向客户端发送了回复数据包服务端认为连接是建立成功的并且会维持连接。但客户端层面认为连接是超时的因此将永远不会关闭该连接。这样就会造成服务端有残留的资源从而造成服务端资源浪费久而久之可能会导致服务端无新连接资源可用。 另外一个需要说明的是客户端和服务端的套接字都有相应的状态而且状态会随着连接的不同阶段变化。初始状态都是CLOSE最终连接建立成功后都是ESTABLISHED,具体变化过程如图3所示。后面本文会详细介绍状态变化情况。 传输数据  完成连接建立之后客户端和服务端就可以进行数据传输了。我们知道TCP是可靠的传输那么传输的可靠性是通过什么来保证的呢主要就是通过包头中的校验和、请求序列号和应答序列号参考图2。 TCP数据内容的可靠性是通过校验和保证的。TCP在发送数据时都会计算整个数据包的校验和并存储在包头的校验和字段中。接收方会按照规则进行计算从而确认接收到的数据是否是正确的。发送发计算校验和的流程大概如下 把伪首部、TCP包头和TCP数据分为16为的字并把TCP包头中的校验和字段置0用反码加法累加所有16位数字对计算结果去反将其填充到TCP包头的校验和字段 接收方将所有原码相加高位叠加如果全为1则表示数据正确否则说明数据有错误。 TCP数据包顺序的可靠性是通过请求序列号和应答序列号保证的。在数据传输中的每个请求都会有一个请求序列号而在接收方接收到数据后会发送一个应答序列号这样发送方就能知道数据是否被正确接收而接收方也能知道数据是否出现乱序从而保证数据包的顺序性。 断开连接  TCP关闭连接分为4步称为4次挥手。连接的关闭不一定是在客户端发起服务端也可以发起关闭连接。关闭连接的过程如下 发起方发送一个FIN置位的数据包,用来请求关闭发送方到接收方的连接接收方发送一个应答ACK标志位为1确认关闭。此时完成了发起方到接收方的连接也即发送方无法再向接收方发送数据但接收方还可以向发送方发送数据。接收方数据传输完成后向发起方发送一个FIN为1的包表示请求断开连接发起方回复一个ACK包确认关闭成功 TCP是全双工通信因此关闭连接时需要双向关闭连接。首先是关闭发起方关闭本端的连接然后是关闭接收方在收到发起方的关闭请求后除了回复关闭应答外还要确保数据传输完成后发起一个关闭连接的请求保证双向同时关闭。 截止到这里本文介绍了基于TCP协议进行网络编程的主要内容。当然这个只是入门级的如果需要真正理解TCP协议和网络编程还需要学习很多内容。后续本号将陆续介绍给大家。
http://www.zqtcl.cn/news/923383/

相关文章:

  • 没备案的网站怎么做淘客企业做网站服务费
  • 网址站点异常怎么解决机关单位建设网站 说明
  • 阿虎手机站青岛关键词排名系统
  • 西安网站建设聚星互联网站成功案例
  • 山东鲁为建设集团网站百度的合作网站有哪些
  • 电子商务网站建设与管理程序设计题6哪家微网站做的好
  • 网站建设图文片平面网页设计是什么
  • 域外网站宁波建设监理协会
  • 胶州网站建设公司哪家好wordpress怎么改标题
  • php网站开发综合案例免费注册推广网站
  • 邯郸做网站的地方广州网站制作
  • 企业网站制作公司24小时接单郑州手机网站推广外包
  • 接做施工图的网站手机移动网站模板
  • 做网站月薪资多少钱如何打开微信小程序
  • 免费建站网站一级大录像不卡在线看网页无锡网站排名提升
  • 无锡门户网站制作服务郑州艾特网站建设
  • 建设网站 万网网页设计表单代码模板
  • 网站速度查询app开发模板网站
  • 国外案例网站做电商网站有什么用
  • 自己做的网站点击赚钱免费制作二级网站
  • 产品包装设计网站网站开发所需费用
  • 新手学做百度联盟网站html水平导航栏怎么做
  • 单页网站排名seo营销软件
  • 网站建设项目报告书广州品牌网站设计价格
  • 阜阳市建设工程网站wordpress三栏博客主题
  • 邢台学校网站建设制作游戏需要多少钱
  • 品牌做网站网上接外包项目
  • 购物网站设计图百安居装修报价清单
  • 做网站要提供什么莱芜综合频道莱芜新闻
  • 网站怎么做前后台存取马鞍山市网站建设公司