首页 > 编程开发 > Python基础教程 >
-
python基础教程之python-网络编程(3)
客户端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/use/bin/env python from socket import * HOST = 'localhost' PORT = 21567 BUFSIZE = 1024 ADDR = (HOST, PORT) udpCliSock = socket(AF_INET, SOCK_DGRAM) while True: data = raw_input( '> ' ) if not data: break udpCliSock.sendto(data, ADDR) data, addr = udpCliSock.recvfrom(BUFSIZE) if not data: break print(data.decode( 'utf-8' )) udpCliSock.close() |
2.5.socket模块属性
除了属性的socket.socket()函数外,socket()模块还提供下面常见属性:
socket 模块属性
属 性 名 称 |
描 述 |
数据属性 |
|
AF_UNIX、AF_INET、AF_INET6①、AF_NETLINK②、AF_TIPC③ |
Python 中支持的套接字地址家族 |
SO_STREAM、SO_DGRAM |
套接字类型(TCP=流,UDP=数据报) |
has_ipv6④ |
指示是否支持 IPv6 的布尔标记 |
异常 |
|
error |
套接字相关错误 |
herror① |
主机和地址相关错误 |
gaierror① |
地址相关错误 |
timeout |
超时时间 |
函数 |
|
socket() |
以给定的地址家族、套接字类型和协议类型(可选)创建一个套接字对象 |
socketpair()⑤ |
以给定的地址家族、套接字类型和协议类型(可选)创建一对套接字对象 |
create_connection() |
常规函数,它接收一个地址(主机名,端口号)对,返回套接字对象 |
fromfd() |
以一个打开的文件描述符创建一个套接字对象 |
ssl() |
通过套接字启动一个安全套接字层连接;不执行证书验证 |
getaddrinfo()① |
获取一个五元组序列形式的地址信息 |
getnameinfo() |
给定一个套接字地址,返回(主机名,端口号)二元组 |
getfqdn()⑥ |
返回完整的域名 |
gethostname() |
返回当前主机名 |
gethostbyname() |
将一个主机名映射到它的 IP 地址 |
gethostbyname_ex() |
gethostbyname()的扩展版本,它返回主机名、别名主机集合和 IP 地址列表 |
gethostbyaddr() |
将一个 IP 地址映射到 DNS 信息;返回与 gethostbyname_ex()相同的 3 元组 |
getprotobyname() |
将一个协议名(如‘tcp’)映射到一个数字 |
getservbyname()/getservbyport() |
将一个服务名映射到一个端口号,或者反过来;对于任何一个函数来说,协议名都是可选的 |
ntohl()/ntohs() |
将来自网络的整数转换为主机字节顺序 |
htonl()/htons() |
将来自主机的整数转换为网络字节顺序 |
inet_aton()/inet_ntoa() |
将 IP 地址八进制字符串转换成 32 位的包格式,或者反过来(仅用于 IPv4 地址) |
inet_pton()/inet_ntop() |
将IP 地址字符串转换成打包的二进制格式,或者反过来(同时适用于 IPv4 和IPv6 地址) |
getdefaulttimeout()/setdefaulttimeout() |
以秒(浮点数)为单位返回默认套接字超时时间;以秒(浮点数)为单位设置默认套接字超时时间 |
2.6.socketServer模块
虽说用Python编写简单的网络程序很方便,但复杂一点的网络程序还是用现成的框架比较 好。这样就可以专心事务逻辑,而不是套接字的各种细节。SocketServer模块简化了编写网络服务程序的任务。同时SocketServer模块也 是Python标准库中很多服务器框架的基础。
socketserver在python2中为SocketServer,在python3种取消了首字母大写,改名为socketserver。
socketserver中包含了两种类,一种为服务类(server class),一种为请求处理类(request handle class)。前者提供了许多方法:像绑定,监听,运行…… (也就是建立连接的过程) 后者则专注于如何处理用户所发送的数据(也就是事务逻辑)。
**一般情况下,所有的服务,都是先建立连接,也就是建立一个服务类的实例,然后开始处理用户请求,也就是建立一个请求处理类的实例。
SocketServer 模块类
类 |
描 述 |
BaseServer |
包含核心服务器功能和mix-in 类的钩子;仅用于推导,这样不会创建这个类的实例;可以用 TCPServer 或 UDPServer 创建类的实例 |
TCPServer/UDPServer |
基础的网络同步 TCP/UDP 服务器 |
UnixStreamServer/UnixDatagramServer |
基于文件的基础同步 TCP/UDP 服务器 |
ForkingMixIn/ThreadingMixIn |
核心派出或线程功能;只用作 mix-in 类与一个服务器类配合实现一些异步性;不能直接实例化这个类 |
ForkingTCPServer/ForkingUDPServer |
ForkingMixIn 和 TCPServer/UDPServer 的组合 |
ThreadingTCPServer/ThreadingUDPServer |
ThreadingMixIn 和 TCPServer/UDPServer 的组合 |
BaseRequestHandler |
包含处理服务请求的核心功能;仅仅用于推导,这样无法创建这个类的实例; 可以使用StreamRequestHandler 或 DatagramRequestHandler 创建类的实例 |
StreamRequestHandler/DatagramRequestHandler |
实现 TCP/UDP 服务器的服务处理器 |