python基础教程(第三版)学习笔记(十四)

第十四章 网络编程
 

鉴于Python提供的网络工具众多,这里只能简要地介绍它的网络功能。 本章首先概述Python标准库中的一些网络模块。然后讨论SocketServer和相关的类,并介绍 地介绍同时处理多个连接的各种方法。最后,简单地说一说Twisted,这是一个使用Python编写网 络程序的框架,功能丰富而成熟。
 

14.1 几个网络模块
 

14.1.1 模块 socket
 

网络编程中的一个基本组件是套接字(socket)。套接字基本上是一个信息通道,两端各有一 个程序。在Python中,大多数网络编程都隐藏了模块socket的基本工作原理,不与套接字直接交互。
 

套接字分为两类:服务器套接字和客户端套接字。创建服务器套接字后,让它等待连接请求 的到来。这样,它将在某个网络地址(由IP地址和端口号组成)处监听,直到客户端套接字建立 连接。随后,客户端和服务器就能通信了。
 

客户端套接字处理起来通常比服务器端套接字容易些,因为服务器必须准备随时处理客户端 连接,还必须处理多个连接;而客户端只需连接,完成任务后再断开连接即可。
 

本章后面将介绍 如何使用SocketServer等类和Twisted框架进行服务器端编程。
 

套接字是模块socket中socket类的实例。函数格式为:
 

socket(family,type[,protocol])


 

实例化套接字时最多可指定三个参数:一个地址族 (family,默认为socket.AF_INET);一个是socket类型是流套接字(typ,默认设置socket.SOCK_STREAM,)还是数据报套接字 (socket.SOCK_DGRAM);一个是协议类型(protocol,使用默认值0就好)。创建普通套接字时,不用提供任何参数。
 

地址族(又称协议族):
 

| Family参数 | 描述 |
| --------------- | ---------------------------------- |
| socket.AF_UNIX | 只能够用于单一的Unix系统进程间通信 |
| socket.AF_INET | 服务器之间网络通信 ipv4 |
| socket.AF_INET6 | IPv6 |
 

socket类型:
 

| Type参数 | 描述 |
| ------------------ | ------------------------------------------------------------ |
| socket.SOCK_STREAM | 流式socket , 当使用TCP时选择此参数 |
| socket.SOCK_DGRAM | 数据报式socket ,当使用UDP时选择此参数 |
| socket.SOCK_RAW | 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头Type参数 |
 

协议类型 :
 

| protocol参数 | 描述 |
| ------------------ | ------------------------------------------------------------ |
| socket.IPPROTO_RAW | 相当于protocol=255,此时socket只能用来发送IP包,而不能接收任何的数据。发送的数据需要自己填充IP包头,并且自己计算校验和 |
| socket.IPPROTO_IP | 相当于protocol=0,此时用于接收任何的IP数据包。其中的校验和和协议分析由程序自己完成 |
 

服务器套接字先调用方法bind,再调用方法listen来监听特定的地址。然后,客户端套接字 就可连接到服务器了,办法是调用方法connect并提供调用方法bind时指定的地址(在服务器端, 可使用函数socket.gethostname获取当前机器的主机名)。这里的地址是一个格式为(host, port) 的元组,其中host是主机名(如www.example.com),而port是端口号(一个整数)。方法listen接 受一个参数——待办任务清单的长度(即最多可有多少个连接在队列中等待接纳,到达这个数量 后将开始拒绝连接)。
 

服务器套接字开始监听后,就可接受客户端连接了,这是使用方法accept来完成的。这个方 法将阻断(等待)到客户端连接到来为止,然后返回一个格式为(client, address)的元组,其中 client是一个客户端套接字,而address是前面解释过的地址。服务器能以其认为合适的方式处 理客户端连接,然后再次调用accept以接着等待新连接到来。这通常是在一个无限循环中完成的。<

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值