查字典图书网
当前位置: 查字典 > 图书网 > web > Python网络编程攻略 > 试读

Python网络编程攻略[试读]

1.1 简介

本章攻略:  打印设备名和IPv4地址  获取远程设备的IP地址  将IPv4地址转换成不同的格式  通过指定的端口和协议找到服务名  主机字节序和网络字节序之间相互转换  设定并获取默认的套接字超时时间  优雅地处理套接字错误  修改套接字发送和接收的缓冲区大小 ... 查看全部[ 1.1 简介 ]

1.2 打印设备名和IPv4地址

有时,你需要快速查看设备的某些信息,例如主机名、IP地址和网络接口的数量等。这些信息使用Python脚本很容易获取。 1.2.1 准备工作 编写代码之前先要在设备上安装Python。大多数Linux发行版都预装了Python。如果使用微软Windows操作系统,可以从Python的网站上下载二进... 查看全部[ 1.2 打印设备名和IPv4地址 ]

1.3 获取远程设备的IP地址

有时需要把设备的主机名转换成对应的IP地址,例如快速查询域名。本攻略介绍一个简单的函数来完成这一操作。 1.3.1 实战演练 如果想知道远程设备的IP地址,可以使用内置的库函数gethostbyname(),其参数是远程设备的主机名。 这里,我们要调用的是类函数gethostbyname()。... 查看全部[ 1.3 获取远程设备的IP地址 ]

1.4 将IPv4地址转换成不同的格式

如果要使用低层网络函数,有时普通的字符串形式的IP地址并不是很有用,需要把它们转换成打包后的32位二进制格式。 1.4.1 实战演练 Python的socket库提供了很多用来处理不同IP地址格式的函数,这里我们使用其中的两个:inet_aton()和inet_ntoa()。 我们来定义con... 查看全部[ 1.4 将IPv4地址转换成不同的格式 ]

1.5 通过指定的端口和协议找到服务名

如果想找到网络服务,最好知道该服务运行在TCP或UDP协议的哪个端口上。 1.5.1 准备工作 如果知道网络服务使用的端口,可以调用socket库中的getservbyport()函数来获取服务的名字。调用这个函数时可以根据情况决定是否提供协议名。 1.5.2 实战演练 我们来定义find_... 查看全部[ 1.5 通过指定的端口和协议找到服务名 ]

1.6 主机字节序和网络字节序之间相互转换

编写低层网络应用时,或许需要处理通过电缆在两台设备之间传送的低层数据。在这种操作中,需要把主机操作系统发出的数据转换成网络格式,或者做逆向转换,因为这两种数据的表示方式不一样。 1.6.1 实战演练 Python的socket库提供了将数据在网络字节序和主机字节序之间相互转换的函数。你可能想了解... 查看全部[ 1.6 主机字节序和网络字节序之间相互转换 ]

1.7 设定并获取默认的套接字超时时间

有时,你需要处理socket库某些属性的默认值,例如套接字超时时间。 1.7.1 实战演练 你可以创建一个套接字对象实例,调用gettimeout()方法获取默认的超时时间,调用settimeout()方法设定一个超时时间。这种操作在开发服务器应用时很有用。 在test_socket_time... 查看全部[ 1.7 设定并获取默认的套接字超时时间 ]

1.8 优雅地处理套接字错误

在网络应用中,经常会遇到这种情况:一方尝试连接,但另一方由于网络媒介失效或者其他原因无法响应。Python的socket库提供了一个方法,能通过socket.error异常优雅地处理套接字错误。在这个攻略中会举几个例子。 1.8.1 实战演练 我们来编写几个try-except代码块,每个块对应... 查看全部[ 1.8 优雅地处理套接字错误 ]

1.9 修改套接字发送和接收的缓冲区大小

很多情况下,默认的套接字缓冲区大小可能不够用。此时,可以将默认的套接字缓冲区大小改成一个更合适的值。 1.9.1 实战演练 我们要使用套接字对象的setsockopt()方法修改默认的套接字缓冲区大小。 首先,定义两个常量:SEND_BUF_SIZE和RECV_BUF_SIZE。然后在一个函数... 查看全部[ 1.9 修改套接字发送和接收的缓冲区大小 ]

1.10 把套接字改成阻塞或非阻塞模式

默认情况下,TCP套接字处于阻塞模式中。也就是说,除非完成了某项操作,否则不会把控制权交还给程序。例如,调用connect() API后,连接操作会阻止程序继续往下执行,直到连接成功为止。很多情况下,你并不想让程序一直等待服务器响应或者有异常终止操作。例如,如果编写了一个网页浏览器客户端连接服务器,... 查看全部[ 1.10 把套接字改成阻塞或非阻塞模式 ]

1.11 重用套接字地址

不管连接是被有意还是无意关闭,有时你想始终在同一个端口上运行套接字服务器。某些情况下,如果客户端程序需要一直连接指定的服务器端口,这么做就很有用,因为无需改变服务器端口。 1.11.1 实战演练 如果在某个端口上运行一个Python套接字服务器,连接一次之后便终止运行,就不能再使用这个端口了。如... 查看全部[ 1.11 重用套接字地址 ]

1.12 从网络时间服务器获取并打印当前时间

很多程序要求设备的时间精准,例如Unix系统中的make命令。设备上的时间可能不够准确,需要和网络中的时间服务器同步。 1.12.1 准备工作 你可以编写一个Python客户端,让设备上的时间和某个网络时间服务器同步。要完成这一操作,需要使用ntplib,通过“网络时间协议”(Network T... 查看全部[ 1.12 从网络时间服务器获取并打印当前时间 ]

1.13 编写一个SNTP客户端

与前一个攻略不同,有时并不需要从NTP服务器上获取精确的时间。遇到这种情况,就可以使用NTP的简化版本,叫作“简单网络时间协议”。 1.13.1 实战演练 让我们不使用任何第三方库编写一个简单的SNTP客户端。 首先,定义两个常量:NTP_SERVER和TIME1970。NTP_SERVER是... 查看全部[ 1.13 编写一个SNTP客户端 ]

1.14 编写一个简单的回显客户端/服务器应用

尝试过Python中socket模块的基本API后,现在我们来编写一个套接字服务器和客户端。这里,你将有机会利用在前述攻略中掌握的基本知识。 1.14.1 实战演练 在这个例子中,不管服务器从客户端收到什么输入,都会将其回显出来。我们要使用Python中的argparse模块,在命令行中指定TC... 查看全部[ 1.14 编写一个简单的回显客户端/服务器应用 ]