我> 上一页下一页
Python 提供了两个级别的网络服务访问权限。在底层,您可以访问底层操作系统中的基本套接字支持,这允许您为面向连接和无连接协议实现客户端和服务器。
Python 还具有一些库,可以提供对特定应用程序级网络协议(例如 FTP、HTTP 等)的更高级别访问。
本章让您了解网络中最著名的概念 - 套接字编程。
什么是套接字?
套接字是双向通信通道的端点。套接字可以在一个进程内、同一台机器上的进程之间或不同大陆的进程之间进行通信。
套接字可以通过多种不同的通道类型实现:Unix 域套接字、TCP、UDP 等。 套接字 库提供了用于处理公共传输的特定类以及用于处理其余部分的通用接口。
套接字有自己的词汇 -
Sr.No. | 术语和描述 |
---|---|
1 | 域 用作传输机制的协议族。这些值是 AF_INET、PF_INET、PF_UNIX、PF_X25 等常量。 |
2 | 类型 两个端点之间的通信类型,通常是面向连接协议的 SOCK_STREAM 和无连接协议的 SOCK_DGRAM。 |
3 | 协议 通常为零,这可用于标识域和类型内的协议变体。 |
4 | 主机名 网络接口的标识符 -
|
5 | 端口 每个服务器侦听调用一个或多个端口的客户端。端口可以是 Fixnum 端口号、包含端口号的字符串或服务名称。 |
套接字 模块
要创建套接字,您必须使用 socket.socket() socket 中可用的函数 模块,具有通用语法 -
s =socket.socket (socket_family, socket_type, protocol=0)
这里是参数的描述 -
-
socket_family − 如前所述,这是 AF_UNIX 或 AF_INET。
-
socket_type - 这是 SOCK_STREAM 或 SOCK_DGRAM。
-
协议 − 通常省略,默认为 0。
一旦你有 socket 对象,然后您可以使用所需的函数来创建您的客户端或服务器程序。以下是所需的功能列表 -
服务器套接字方法
Sr.No. | 方法和说明 |
---|---|
1 | s.bind() 该方法将地址(主机名,端口号对)绑定到套接字。 |
2 | s.listen() 此方法设置并启动 TCP 侦听器。 |
3 | s.accept() 这被动地接受 TCP 客户端连接,等待连接到达(阻塞)。 |
客户端套接字方法
Sr.No. | 方法和说明 |
---|---|
1 | s.connect() 该方法主动发起TCP服务器连接。 |
通用套接字方法
Sr.No. | 方法和说明 |
---|---|
1 | s.recv() 此方法接收 TCP 消息 |
2 | s.send() 该方法传输TCP报文 |
3 | s.recvfrom() 该方法接收UDP消息 |
4 | s.sendto() 该方法传输UDP报文 |
5 | s.close() 此方法关闭套接字 |
6 | socket.gethostname() 返回主机名。 |
一个简单的服务器
要编写 Internet 服务器,我们使用 socket socket 模块中可用的函数来创建一个 socket 对象。然后使用套接字对象调用其他函数来设置套接字服务器。
现在调用 bind(hostname, port) 指定端口的函数 为您在给定主机上的服务。
接下来,调用 accept 返回对象的方法。此方法等待客户端连接到您指定的端口,然后返回一个连接 表示与该客户端的连接的对象。
#!/usr/bin/python # 这是 server.py fileimport socket # 导入 socket modules =socket.socket() # 创建一个 socket objecthost =socket.gethostname() # 获取本地机器nameport =12345 # 为你的服务预留一个端口.s.bind((host, port)) # 绑定到ports.listen(5) # 现在等待客户端连接。while True:c, addr =s.accept() # 与客户端建立连接。 print 'Got connection from', addr c.send('Thank you for connection') c.close() # 关闭连接
一个简单的客户端
让我们编写一个非常简单的客户端程序,它打开一个到给定端口 12345 和给定主机的连接。使用 Python 的 socket 创建套接字客户端非常简单 模块功能。
socket.connect(hosname, port) 打开一个到 hostname 的 TCP 连接 在端口 .一旦你打开了一个套接字,你就可以像任何 IO 对象一样从中读取数据。完成后,记得关闭它,就像关闭文件一样。
以下代码是一个非常简单的客户端,它连接到给定的主机和端口,从套接字读取任何可用数据,然后退出 -
#!/usr/bin/python # 这是client.py fileimport socket # 导入socket modules =socket.socket() # 创建socket objecthost =socket.gethostname() # 获取本地机器nameport =12345 # 为你的服务预留一个端口.s.connect((host, port))print s.recv(1024)s.close() # 完成后关闭socket
现在在后台运行这个server.py,然后在client.py上面运行看看结果。
# 以下将在后台启动服务器。$ python server.py 一旦服务器启动,运行客户端如下:$ python client.py
这将产生以下结果 -
从 ('127.0.0.1', 48437) 获得连接感谢您的连接
Python 互联网模块
Python Network/Internet 编程中一些重要模块的列表。
协议 | 常用功能 | 端口号 | Python 模块 |
---|---|---|---|
HTTP | 网页 | 80 | httplib、urllib、xmlrpclib |
NNTP | Usenet 新闻 | 119 | nntplib |
FTP | 文件传输 | 20 | ftplib、urllib |
SMTP | 发送电子邮件 | 25 | smtplib |
POP3 | 正在获取电子邮件 | 110 | poplib |
IMAP4 | 正在获取电子邮件 | 143 | imaplib |
远程登录 | 命令行 | 23 | telnetlib |
地鼠 | 文件传输 | 70 | gopherlib、urllib |
请检查上面提到的所有库以使用 FTP、SMTP、POP 和 IMAP 协议。
进一步阅读
这是套接字编程的快速入门。这是一个广阔的主题。建议通过以下链接查找更多详细信息 -
-
Unix套接字编程。
-
Python 套接字库和模块。
Python