Python3---网络编程

客户端/服务器架构

什么是客户端/服务器架构?

服务器就是一系列硬件或软件,为一个客户端(服务的用户)提供所需的“服务”。它存在的唯一目的就是等待客户端的请求,并响应他们(提供服务),然后等待更多请求。

客服端因特定的请求而联系服务器,并发送必要的数据,然后等待服务器的回应,最后完成请求或给出故障的原因。服务器无限的运行下去,并不断的处理请求;而客户端会对服务进行一次性请求,然后接收该服务,最后结束他们之间的事务。客户端在一段时间后可能会再次发出请求,但这些都被当做不同的事务。

客户端/服务器网络编程

在服务器响应客户端请求之前,必须进行一些初步的设置流程来为之后的工作做准备。首先会创建一个通信端点它能够使服务器监听请求。服务器就相当于公司的前台,一旦电话号码和设备安装成功且接线员到达时,服务就可以开始了。一旦一个通信端点已经建立,监听服务器就可以进入无限循环中,等待客户端的连接并响应它们的请求。

客户端所需要做的就是创建它的单一通信端点,然后建立一个到服务器的连接。客户端就可以发出请求,该请求包括任何必要的数据交换。一旦请求被服务器处理,且客户端收到结果或某种确认信息,此次通信就会被终止。

套接字:通信端点

套接字是计算机网络数据结构,它体现了上文所说的“通信端点”,在任何类型的通信开始之前,网络应用程序必须创建套接字。可以将它们比作电话插孔,没有它将无法进行通信。

套接字最初是为同一主机上的应用程序所创建,使得主机上运行的一个程序(又名一个进程)与另一个运行的程序进行通信,这就是所谓的进程间通信。有两种套接字:基于文件的和面向网络的。

(1)AF_UNIX套接字:代表地址家族(address family):UNIX----基于文件

因为两个进程运行在同一台计算机上,所以这些套接字都是基于文件的,这意味着文件系统支持它们的底层基础结构。

(2)AF_INET套接字:代表地址家族:因特网----基于网络。

AF_INET:IPv4

AF_INET6:IPv6

套接字地址:主机-端口对

主机名和端口号就像区号和电话号码的组合一样。一个网络地址由主机名和端口号对组成。在通信时必须要有其他人在另一端接听;否则,你将听到“对不起,您所拨打的电话是空号,请核对后再拨”,或者在浏览网页时会出现“无法连接服务器,服务器没有响应或者服务不可达”

有效的端口号范围是:0~65535(0~1024预留给了系统)

面向连接的套接字和无连接的套接字
1.面向连接的套接字:

通信之前必须先建立一个连接,eg:使用电话系统给一个朋友打电话。这种类型的通信也称为虚拟电路流套接字

面向连接的通信提供序列化的,可靠的,不重复的数据交付,而没有记录边界。这基本上意味着每条消息可以拆分成多个片段,并且每一条消息片段都确保能够到达目的,然后将它们按顺序组合在一起,最后将完整消息传递给正在等待的应用程序。

实现这种连接类型的主要协议是传输控制协议(TCP),TCP的套接字为SOCK_STREAM。

2.无连接的套接字

数据报类型的套接字,是一种无连接的套接字。这意味着在通信开始之前不需要建立连接。所以在数据传输过程中无法保证它的顺序性,可靠性或重复性。数据报保存了记录边界,这意味着消息是以整体发送的,并非首先分成多个片段,例如:使用面向连接的协议。

使用数据报的消息传输可以比作邮政服务。信件和包裹或许并不能以发送顺序到达。事实上,它们可能不会到达。为了将其添加到并发通信中,在网络中甚至有可能存在重复的消息。

那么,既然有这么多的副作用,为什么还要使用数据报呢?

由于面向连接的套接字所提供的保证,因此它们的设置以及对虚拟电路连接的维护需要大量的开销。然而,数据报不需要这些开销,即它的成本更加“低廉”,因此,它们通常能提供更好的性能并且可能适合一些类型的应用程序。

实现这种连接类型的主要协议是用户数据报协议(UDP),UDP套接字为SOCK_DGRAM。

Python中的网络编程

1.socket()模块函数

创建套接字,必须使用soc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值