Python客户端/服务器网络编程

本文介绍了Python中的网络编程基础知识,包括套接字的概念、类型、地址和连接方式。讲解了面向连接的TCP套接字和无连接的UDP套接字,以及如何在Python中使用socket模块创建TCP服务器和客户端。还提到了SocketServer模块,它是Python标准库中的一个高级模块,用于简化网络服务器的创建,提供了事件驱动的编程模型。
摘要由CSDN通过智能技术生成

在服务器响应客户端请求之前,首先创建一个通信端点它能够使服务器监听请求。一旦一个通信端点已经建立,监听服务器就可以进入无限循环中,等待客户端的连接并响应他们的请求。通信端点好比是允许通信的一些基础设施

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



套接字:通信端点


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



套接字有两种类型:基于文件的和面向网络的。


第一种套接字是基于文件的,并拥有一个“家族名字”AF_UNIX(又名AF_LOCAL),它代表地址家族:UNIX。AF_LOCAL将代替AF_UNIX,然而考虑到后向兼容性,很多系统都同时使用二者,只是对同一个常数使用不同的别名。Python本身仍然在使用AF_UNIX。


第二种套接字是基于网络的,它也有自己的家族名字AF_INET,它代表地址家族:因特网。另一个地址家族AF_INET6用于第6版因特网协议(IPv6)寻址。


此外,还有其他的地址家族,这些要么是专业的、过时的、很少使用的,要么是仍未实现的。在所有的地址家族中,目前AF_INET是使用得最广泛得。

总的来说,Python只支持AF_UNIX、AF_NETLINK、AF_TIPC和AF_INET家族。网络编程涉及AF_INET。


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

如果套接字像一个电话插孔,那么主机名和端口号就像区号和电话号码的组合。在拥有硬件和通信的能力后,你还要知道电话打给谁。一个网络地址由主机名和端口号对组成。有效的端口号范围为0~65535(小于1024的端口号预留给了系统),众所周知的端口号列表可以在这个网站中查看:http://www.iana.org/assignments/port-numbers



套接字连接有两种风格:面向连接的和无连接的。

不管采用哪种地址家族,都有两种不同风格的套接字连接。


1、面向连接的套接字


面向连接意味着在进行通信之前必须先建立一个连接,例如使用电话系统给一个朋友打电话。这种类型的通信也称为虚拟电路或流套接字。

特点:每条消息可以拆分成多个片段,并且每一条消息片段都确保能够到达目的地,然后将它们按顺序组合在一起,最后将完整消息传递给正在等待的应用程序。

协议:实现这种连接类型的主要协议是传输控制协议(TCP)。为了创建TCP套接字,必须使用SOCK_STREAM作为套接字类型。TCP套接字的名字SOCK_STREAM基于流套接字的其中一种表示。因为这些套接字(AF_INET)使用因特网协议(IP)来搜寻网络中的主机,所以整个系统通常结合两种协议(TCP和IP)。


2、无连接的套接字


此类套接字是数据报类型的套接字,是一种无连接的套接字,这意味着在通信开始之前并不需要建立连接,例如邮政服务,信件和包裹或许并不能以发送顺序到达,事实上他们可能不会到达,为了将其添加到并发通信中,在网络中甚至可能存在重复的消息。

特点:在数据传输过程中并无法保证它的顺序性、可靠性或重复性。然而,数据报确实保存了记录边界,这意味着消息是以整体发送的,而并非首先分成多个片段。

协议:主要协议是用户数据报协议(UDP)。为了创建UDP套接字,必须使用SOCK_DGRAM作为套接字类型。因为这些套接字也使用因特网协议(IP)来搜寻网络中的主机,所以整个系统通常结合两种协议(UDP和IP)。




Python中的网络编程


<
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值