Python:socket 库高级用法举例和应用详解

Python:socket库高级用法举例和应用详解

模块介绍

socket 库是 Python 的标准库之一,提供了一种用于在网络程序之间进行通信的接口。该库适用于 Python 3.x 版本,通过封装底层 socket 接口,提供了丰富的功能来实现快速和可靠的网络通信。

适配版本:Python 3.x

该库包括为 IPv4 和 IPv6 地址创建套接字、为 TCP 和 UDP 协议的网络通信提供支持的功能。常见的 socket 类型有:

  • socket.AF_INET(IPv4)
  • socket.AF_INET6(IPv6)
  • socket.SOCK_STREAM(TCP)
  • socket.SOCK_DGRAM(UDP)

应用场景

socket 库在许多网络编程场景中都有广泛的应用,例如:

  1. Web 服务器和客户端 - 创建简单的 Web 服务器和 HTTP 客户端。
  2. 实时通信 - 开发即时消息应用、网络聊天系统。
  3. 数据流传输 - 在网络上高效传输文件、音频和视频数据。
  4. 物联网设备通信 - 与传感器和智能设备之间保持网络连接。
  5. 网络爬虫 - 把数据从网络上抓取下来并进行处理。

安装说明

socket 库是 Python 的内置标准库,无需额外安装。只需 import socket 即可使用库中的所有功能。

如:

1
import socket  # 导入socket库

用法举例

示例 1: 创建一个 TCP 服务器和客户端

服务端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import socket  # 导入socket库

# 创建一个TCP/IP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_address = ('localhost', 65432) # 绑定服务器地址和端口
server_socket.bind(server_address)

server_socket.listen(1) # 监听TCP连接
print('等待客户端连接...')

connection, client_address = server_socket.accept() # 接受连接请求
try:
print('连接来自', client_address)
while True:
data = connection.recv(1024) # 接收数据
print('收到数据:', data.decode())
if data:
connection.sendall(data) # 发送数据
else:
break
finally:
connection.close() # 关闭连接

客户端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import socket  # 导入socket库

# 创建一个TCP/IP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_address = ('localhost', 65432) # 连接服务器地址和端口
client_socket.connect(server_address)

try:
message = '这是来自客户端的消息'
client_socket.sendall(message.encode()) # 发送数据

data = client_socket.recv(1024) # 接收数据
print('收到:', data.decode())
finally:
client_socket.close() # 关闭连接

示例 2: 创建一个 UDP 服务器和客户端

服务端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import socket  # 导入socket库

server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建一个UDP socket
server_address = ('localhost', 65433) # 绑定服务器地址和端口
server_socket.bind(server_address)

print('等待客户端消息...')
while True:
data, address = server_socket.recvfrom(4096) # 接收数据
print('收到消息来自:', address)
print('消息内容:', data.decode())

if data:
sent = server_socket.sendto(data, address) # 发送数据

客户端代码:

1
2
3
4
5
6
7
8
9
10
import socket  # 导入socket库

client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建一个UDP socket
server_address = ('localhost', 65433)

message = '这是来自UDP客户端的消息'
client_socket.sendto(message.encode(), server_address) # 发送数据

data, server = client_socket.recvfrom(4096) # 接收数据
print('收到:', data.decode())

示例 3: 从网站获取数据(HTTP Client)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import socket  # 导入socket库

# 创建一个TCP/IP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_address = ('example.com', 80) # 连接服务器地址和端口
client_socket.connect(server_address)

try:
# HTTP请求头
request = 'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n'
client_socket.sendall(request.encode()) # 发送HTTP GET请求

response = client_socket.recv(4096) # 接收HTTP响应
print('收到HTTP响应:')
print(response.decode())
finally:
client_socket.close() # 关闭连接

希望这些例子能帮助你更好地理解和使用 Python 的 socket 库。如果你觉得这篇文章对你有所帮助,请持续关注我的博客 —— 全糖冲击博客。这里不仅汇总了所有 Python 标准库使用教程,还包含了丰富的实战经验分享与解决方案,是你的最佳学习资源。不断更新的内容,能够让你随时找到最新的技术动态与解决问题的方法。立即关注吧,搭建并完善你的知识体系!

软件版本可能变动

如果本文档不再适用或有误,请留言或联系我进行更新。让我们一起营造良好的学习氛围。感谢您的支持! - Travis Tang