当前位置: 首页 > news >正文

python socket库详解

socket是 Python 标准库中的一个模块,提供了对底层网络通信的接口,允许开发者进行网络编程。通过 socket你可以创建客户端和服务器应用程序,实现网络通信。

 1. 基本概念

- Socket:是网络通信的端点,用于在不同主机之间或同一主机上的不同进程之间进行数据传输。
- IP 地址:标识网络中的设备。
- 端口号:标识设备上的特定进程或服务。
- 协议:常用的协议有 TCP(传输控制协议)和 UDP(用户数据报协议)。

2. 创建 Socket

使用 socket.socket()函数可以创建一个套接字对象。
import socket

# 创建一个 TCP/IP 套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 创建一个 UDP 套接字
udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 

- socket.AF_INET:表示使用 IPv4 地址。
- socket.SOCK_STREAM:表示使用 TCP 协议。
- socket.SOCK_DGRAM:表示使用 UDP 协议。

3. TCP Socket 示例

3.1 TCP 服务器
import socket

# 创建 TCP/IP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定套接字到本地地址和端口
server_address = ('localhost', 12345)
server_socket.bind(server_address)

# 监听连接
server_socket.listen(1)
print("等待连接...")

while True:
    # 等待连接
    connection, client_address = server_socket.accept()
    try:
        print("连接来自:", client_address)

        # 接收数据
        data = connection.recv(1024)
        print("接收到数据:", data.decode())

        # 发送数据
        connection.sendall("Hello, Client!".encode())
    finally:
        # 关闭连接
        connection.close()
 

3.2 TCP 客户端
import socket

# 创建 TCP/IP 套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务器
server_address = ('localhost', 12345)
client_socket.connect(server_address)

try:
    # 发送数据
    message = "Hello, Server!"
    client_socket.sendall(message.encode())

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

4. UDP Socket 示例

4.1 UDP 服务器
import socket

# 创建 UDP 套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定套接字到本地地址和端口
server_address = ('localhost', 12345)
server_socket.bind(server_address)

print("等待数据...")

while True:
    # 接收数据
    data, client_address = server_socket.recvfrom(4096)
    print("接收到数据:", data.decode())

    # 发送数据
    server_socket.sendto("Hello, Client!".encode(), client_address)

4.2 UDP 客户端
import socket

# 创建 UDP 套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 服务器地址
server_address = ('localhost', 12345)

try:
    # 发送数据
    message = "Hello, Server!"
    client_socket.sendto(message.encode(), server_address)

    # 接收数据
    data, server = client_socket.recvfrom(4096)
    print("接收到数据:", data.decode())
finally:
    # 关闭套接字
    client_socket.close()
 

5. Socket 常用方法

- bind(address):将套接字绑定到指定的地址和端口。
- listen(backlog):开始监听连接,backlog 指定最大连接数。
- accept():接受一个连接,返回一个新的套接字对象和客户端地址。
- connect(address):连接到指定的地址。
- send(data):发送数据。
- recv(bufsize):接收数据,bufsize指定最大接收字节数。
- sendto(data, address):发送数据到指定的地址。
- recvfrom(bufsize):接收数据,并返回数据和发送方地址。
- close():关闭套接字。

6. 异常处理

在网络编程中,可能会遇到各种异常情况,如连接超时、连接被拒绝等。可以使用 try-except块来捕获和处理这些异常。
import socket
import sys

try:
    # 创建套接字并连接
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('localhost', 12345))
except socket.error as err:
    print("Socket 错误:", err)
    sys.exit(1)
finally:
    sock.close()
 

7. 总结

socket模块是 Python 网络编程的基础,通过它可以实现 TCP 和 UDP 协议的通信。掌握 socket的基本用法后,你可以进一步学习更高级的网络编程技术,如多线程服务器、异步 I/O 等。

相关文章:

  • BigFoot Decursive lua
  • 使用 Dify 创建自然语言生成 Word 文档的应用(详细指南)
  • POCO F4刷机color 15
  • JS实现省份地级市的选择
  • 隔板法的本质,球盒问题
  • 深度学习笔记(37周)
  • [local-file-system]基于服务器磁盘的本地文件存储方案
  • centos7上安装Docker
  • (性能测试)性能测试工具 2.jmeter的环境搭建 3jmeter元件和4使用实例 5jmeter元件和参数化
  • 算法模型全解析:优缺点、场景适配与选择逻辑
  • 一次Milvus迁移的记录
  • Android 应用开发:架构重构、性能优化与离线缓存系统实现
  • CobaltStrike详细使用及Linux上线
  • Linux:进程程序替换
  • 寻找数字c++
  • iOS OC匹配多个文字修改颜色和字号
  • YOLO优化之多信息融合MIF
  • mesh开发解析
  • Express.js 是一个轻量级、灵活且功能强大的 Node.js Web 应用框架
  • 洛谷每日1题-------Day20__P1401 [入门赛 #18] 禁止在 int 乘 int 时不开 long long
  • “爱鸟周”为何不能像FI和花展那样“市区联动”
  • 七大交响乐团“神仙斗法”,时代交响在上海奏出时代新声
  • 花20万骑自行车?CityRide带火“骑行经济”
  • 国家主席习近平抵达莫斯科
  • 公募基金改革八大要点:建立浮动管理费收取机制、降低规模排名考核权重
  • 央行、证监会:科技创新债券含公司债券、企业债券、非金融企业债务融资工具等