亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

Python 网络编程:掌握 Socket 与高级协议

Python 提供两级网络服务访问。低级可访问操作系统基础 Socket 支持,实现面向连接和无连接协议的客户端/服务端。高级库提供 FTP、HTTP 等应用层协议访问。

本章深入讲解网络编程核心概念 —— Socket 编程。

什么是 Socket?

Socket 是双向通信通道的端点。可进程内通信、同机进程间通信、跨大陆进程间通信。

Socket 可基于多种通道类型实现:Unix 域套接字、TCP、UDP 等。socket 库提供常用传输的特定类及通用接口。

Socket 术语表:

序号术语及说明
1Domain(域):作为传输机制的协议族,常量如 AF_INET, PF_INET, PF_UNIX, PF_X25 等。
2type(类型):端点间通信类型,通常 SOCK_STREAM 面向连接,SOCK_DGRAM 无连接。
3protocol(协议):通常为 0,可用于标识域和类型下的协议变体。
4hostname(主机名):网络接口标识符:
  • 字符串:主机名、点分十进制 IP、IPv6 冒号表示法
  • "":INADDR_BROADCAST 地址
  • 空字符串:INADDR_ANY
  • 整数:主机字节序二进制地址
5port(端口):服务器监听客户端调用的端口,可以是整数端口号、包含端口号的字符串、服务名。

socket 模块

创建 Socket 使用 socket.socket() 函数,语法:

s = socket.socket(socket_family, socket_type, protocol=0)

参数说明:

获得 Socket 对象后,可调用相关函数创建客户端/服务端程序。常用方法分类如下:

服务端 Socket 方法

序号方法及说明
1s.bind():绑定地址(主机名、端口对)到 Socket。
2s.listen():启动 TCP 监听器。
3s.accept():被动接受 TCP 客户端连接,阻塞直到连接到达。

客户端 Socket 方法

序号方法及说明
1s.connect():主动发起 TCP 服务器连接。

通用 Socket 方法

序号方法及说明
1s.recv():接收 TCP 消息。
2s.send():发送 TCP 消息。
3s.recvfrom():接收 UDP 消息。
4s.sendto():发送 UDP 消息。
5s.close():关闭 Socket。
6socket.gethostname():返回主机名。

简单服务端

使用 socket 模块的 socket 函数创建 Socket 对象,调用其他函数建立服务器。调用 bind(hostname, port) 指定服务端口,再调用 accept 等待客户端连接,返回代表该连接的 connection 对象。

#!/usr/bin/python
# server.py
import socket
s = socket.socket()
host = socket.gethostname()
port = 12345
s.bind((host, port))
s.listen(5)
while True:
    c, addr = s.accept()
    print('Got connection from', addr)
    c.send('Thank you for connecting')
    c.close()

简单客户端

创建 Socket 客户端连接指定主机和端口 12345。socket.connect(hostname, port) 打开 TCP 连接。打开后可像 IO 对象一样读取,用完需关闭。

#!/usr/bin/python
# client.py
import socket
s = socket.socket()
host = socket.gethostname()
port = 12345
s.connect((host, port))
print(s.recv(1024))
s.close()

后台运行 server.py 再运行 client.py:

$ python server.py &
$ python client.py

结果:

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

Python 互联网模块

网络/互联网编程重要模块一览:

协议常见功能端口Python 模块
HTTP网页80httplib, urllib, xmlrpclib
NNTPUsenet 新闻119nntplib
FTP文件传输20ftplib, urllib
SMTP发送邮件25smtplib
POP3接收邮件110poplib
IMAP4接收邮件143imaplib
Telnet命令行23telnetlib
Gopher文档传输70gopherlib, urllib

请查阅上述库以使用 FTP、SMTP、POP、IMAP 等协议。

延伸阅读

这是 Socket 编程快速入门,主题广泛。建议参考:

Python

  1. 精通Python数据类型:实战指南
  2. 精通Python运算符:全面指南
  3. 精通Python Pass语句:实战指南
  4. 精通Python函数参数:位置、关键字与默认参数
  5. 精通 Python 字典:创建、操作与进阶技巧
  6. 精通 Python 面向对象编程:类、继承、封装与多态
  7. 精通 Python 迭代器:工作原理与自定义构建
  8. Python 闭包详解:嵌套函数如何捕获变量
  9. 精通 Python datetime:日期、时间与时区实战指南
  10. 精通 Python time.sleep():最佳实践、多线程与实战案例
  11. Python 多线程编程精通:高效并发技术全解析
  12. Python C 扩展开发指南:构建高性能原生模块