上一章Python教程请查看:python访问MySQL数据库及其操作
Python提供对网络服务的两种级别的访问,在较低的级别上,你可以访问底层操作系统中的基本套接字支持,它允许你为面向连接和无连接的协议实现客户机和服务器。
Python还有一些库,可以提供对特定应用程序级网络协议(如FTP、HTTP等)的高级访问。
本章让你了解网络编程中最著名的概念——Socket编程。
1、套接字是什么?套接字是双向通信信道的端点,套接字可以在进程内、同一机器上的进程之间或不同主机上的进程之间通信。
套接字可以在许多不同的通道类型上实现:Unix域套接字、TCP、UDP等等,套接字库提供了处理公共传输的特定类,以及处理其余传输的通用接口。
socket有自己的词汇
编号 | 术语和说明 |
1 | Domain 用作传输机制的协议族,这些值是常量,如AF_INET、PF_INET、PF_UNIX、PF_X25等等。 |
2 | type 两个端点之间的通信类型,通常是面向连接的协议的SOCK_STREAM和无连接协议的SOCK_DGRAM。 |
3 | protocol 通常为零,此值可用于标识域和类型中的协议变体。 |
4 | hostname 网络接口的标识符 一个字符串,可以是一个主机名,一个四点式地址,或者一个冒号(可能还有点)的IPV6地址一个字符串“< broadcast> ”,它指定INADDR_BROADCAST地址。0长度的字符串,指定INADDR_ANY或整数,按主机字节顺序解释为二进制地址。 |
5 | port 每个服务器都侦听客户机对一个或多个端口的调用。端口可以是Fixnum端口号、包含端口号的字符串或服务名称。 |
s = socket.socket (socket_family, socket_type, protocol=0)
这里是参数的说明:
- 如前所述,它可以是AF_UNIX,也可以是AF_INET。
- socket_type,即SOCK_STREAM或SOCK_DGRAM。
- 协议protocol——这通常被忽略,默认为0。
3、服务器套接字的方法
编号 | 方法和说明 |
1 | s.bind() 此方法将地址(主机名、端口号对)绑定到套接字。 |
2 | s.listen() 该方法设置并启动TCP监听器。 |
3 | s.accept() 这被动地接受TCP客户端连接,等待连接到来(阻塞)。 |
编号 | 方法和说明 |
1 | s.connect() 此方法主动启动TCP服务器连接。 |
编号 | 方法和说明 |
1 | s.recv() 此方法接收TCP消息 |
2 | s.send() 这个方法传输TCP消息 |
3 | s.recvfrom() 此方法接收UDP消息 |
4 | s.sendto() 此方法传输UDP消息 |
5 | s.close() 此方法关闭套接字 |
6 | socket.gethostname() 返回的主机名。 |
现在调用bind(主机名、端口)函数来为给定主机上的服务指定端口。
接下来调用返回对象的accept方法。此方法将一直等待,直到客户端连接到你指定的端口,然后返回表示到该客户端的连接的连接对象。
#!/usr/bin/pythonimport socket# 导入socket模块s = socket.socket()# 创建socket对象
host = socket.gethostname() # 获取本地主机
port = 12345# 设置端口号
s.bind((host, port))# 绑定端口s.listen(5)# 等待客户端连接
while True:
c, addr = s.accept()# 建立连接
print '连接来自于: ', addr
c.send('信息...')
c.close()# 关闭连接
7、一个简单的客户端让我们编写一个非常简单的客户端程序,它打开到给定端口12345和给定主机的连接,使用Python的套接字模块函数创建套接字客户机非常简单。
socket.connect(hosname, port)在端口上打开到主机名的TCP连接,打开套接字后,就可以像读取任何IO对象一样读取它,完成后记得关闭它,就像关闭文件一样。
下面的代码是一个非常简单的客户机,它连接到给定的主机和端口,从套接字中读取所有可用数据,然后退出:
#!/usr/bin/pythonimport socket# 导入socket模块s = socket.socket()# 创建socket对象
host = socket.gethostname() # 获取本地主机
port = 12345# 设置端口号s.connect((host, port))
print s.recv(1024)
s.close()# 关闭连接
8、Python网络模块Python网络/Internet编程中一些重要模块的列表。
协议 | 一般功能 | 端口号 | Python模块 |
HTTP | Web pages | 80 | httplib, urllib, xmlrpclib |
NNTP | Usenet news | 119 | nntplib |
FTP | File transfers | 20 | ftplib, urllib |
SMTP | Sending email | 25 | smtplib |
POP3 | Fetching email | 110 | poplib |
IMAP4 | Fetching email | 143 | imaplib |
Telnet | Command lines | 23 | telnetlib |
Gopher | Document transfers | 70 | gopherlib, urllib |
推荐阅读
- python使用SMTP发送邮件 – Python高级开发教程
- Python OpenCV cv2.line()方法用法介绍
- python访问MySQL数据库及其操作详解 – Python高级开发教程
- python CGI编程和Web开发 – Python高级开发教程
- python正则表达式介绍和用法 – Python高级开发教程
- python面向对象编程(类和对象详解介绍 – Python高级开发教程)
- python异常处理和断言 – Python入门开发教程
- python文件IO操作完全解读 – Python入门开发教程
- python模块介绍和操作详解 – Python入门开发教程