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

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 等。


http://www.kler.cn/a/586790.html

相关文章:

  • 【A2DP】深入解读A2DP中通用访问配置文件(GAP)的互操作性要求
  • 堆(Heap)和栈(Stack),这两者通常是指内存管理中两种不同的内存区域
  • 【Android】RuntimeShader 应用
  • 如何使用Jsoup提取商品信息:实战指南
  • Java Collection(3)——BinaryTree(二叉树)
  • std::merge和std::inplace_merge对比分析
  • 谷歌云服务器:服务器怎么安装???
  • 车载Android音频系统 AudioService
  • 京瓷初期的按职能划分的组织
  • PHP语言的开源贡献
  • python函数式编程
  • 003_快乐数
  • 软件测试之单元测试unittest库使用、参数化、unittestteport
  • vivado ooc与global区别
  • 观成科技:​加密C2框架Platypus流量分析
  • DeepSeek-R1 面试 -—— GRPO
  • Spark 中explode用法
  • Android Dagger 2 框架的注解模块源码分析(一)
  • 【Linux】进程(1)进程概念和进程状态
  • 网络运维学习笔记(DeepSeek优化版) 016 HCIA-Datacom综合实验01