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

Python的socket使用

在 Python 中,可以使用 socket 模块编写一个支持多个客户端连接的服务端。常见的实现方式包括使用多线程、多进程或异步 I/O。下面以多线程为例展示如何编写一个服务端,来同时接收和处理多个客户端的连接。

多线程服务端代码示例

这个示例服务端代码中,当客户端连接到服务端时,服务端会为每个连接创建一个新的线程来处理该客户端的请求。这样,多个客户端可以同时连接和与服务端通信。

import socket
import threading# 处理客户端连接的函数
def handle_client(client_socket, client_address):print(f"已连接到客户端: {client_address}")while True:try:# 接收客户端发送的消息message = client_socket.recv(1024).decode('utf-8')if not message:print(f"客户端 {client_address} 已断开连接")breakprint(f"收到来自 {client_address} 的消息: {message}")# 响应客户端的消息client_socket.send("服务器已收到消息".encode('utf-8'))except ConnectionResetError:print(f"客户端 {client_address} 意外断开连接")break# 关闭客户端连接client_socket.close()print(f"客户端 {client_address} 连接已关闭")# 创建服务端套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'  # 监听的主机地址
port = 12345        # 监听的端口号# 绑定主机和端口
server_socket.bind((host, port))
# 启用监听,允许最多5个连接
server_socket.listen(5)
print("服务端已启动,等待客户端连接...")while True:# 接受客户端连接client_socket, client_address = server_socket.accept()print(f"接收到来自 {client_address} 的连接请求")# 为每个客户端启动一个新线程client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))client_thread.start()
  1. 服务端套接字server_socket 创建的是一个 TCP 服务端套接字,绑定到指定的 hostport
  2. 监听客户端连接:使用 server_socket.listen(5) 设置服务端可以同时处理的连接数量,这里设置为最多 5 个连接排队。
  3. 处理客户端的连接:每当一个客户端连接,使用 accept() 接受连接请求,并创建一个新的线程 client_thread 来处理该连接。handle_client 函数中包含处理客户端请求的逻辑。
  4. 线程的使用:每个客户端连接都有一个独立的线程处理,这样服务端可以并发处理多个客户端的请求。

运行步骤

  1. 启动服务端,运行上面的服务端代码。
  2. 每当有客户端连接请求时,服务端会为该客户端创建一个新的线程,以处理连接和通信。

客户端示例代码

以下是一个简单的客户端代码,用于连接服务端并发送消息。

import socket# 创建客户端套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '127.0.0.1'  # 服务端地址
port = 12345        # 服务端端口号# 连接到服务端
client_socket.connect((host, port))# 发送消息到服务端
client_socket.send("你好,服务器!".encode('utf-8'))# 接收服务端的响应
response = client_socket.recv(1024).decode('utf-8')
print(f"收到服务器的响应: {response}")# 关闭客户端连接
client_socket.close()

运行说明

  • 启动服务端代码后,可以启动多个客户端,来测试服务端是否能够同时处理多个客户端连接。
  • 每个客户端连接都会在服务端创建一个新的线程。
  • 服务端可以在 handle_client 函数中设置自定义的消息处理逻辑。

通过这种方式,Python 的 socket 服务端可以处理多个客户端的并发连接。

http://www.lryc.cn/news/474186.html

相关文章:

  • 如何快速搭建一个3D虚拟展厅?
  • Android webview 打开本地H5项目(Cocos游戏以及Unity游戏)
  • 解决项目中图片出不来的bug
  • 手机实时提取SIM卡打电话的信令声音-新的篇章(三、Android虚拟声卡探索)
  • REST APIs与微服务:关键差异
  • 【网安案例学习】反向蛮力攻击Reverse Brute Force Attack
  • TCP/IP网络编程:理解网络编程和套接字
  • CSS实现回到顶部且平滑过渡
  • 10 go语言(golang) - 数据类型:哈希表(map)及原理(二)
  • 【论文解读】Med-BERT: 用于疾病预测的大规模结构化电子健康记录的预训练情境化嵌入
  • [POI2014] PTA-Little Bird(单调队列优化 DP)
  • 【含开题报告+文档+PPT+源码】基于SpringBoot的体育馆管理系统的设计与实现
  • Vue3学习:vue组件中的图片路径问题
  • openCV基础-图像预处理Day26
  • 给文件添加可读可写可执行权限
  • golang有序map
  • 【LangChain系列4】【Chain模块详解】
  • 51c嵌入式~IO合集1
  • ETLCloud怎么样?深度解析其在数据管理中的表现
  • 高频谐振功放电路
  • kafka如何获取 topic 主题的列表?
  • 全新大模型框架Haystack,搭建RAG pipeline
  • 儿童孤独症专家分享:了解治疗与支持的专业帮助
  • 初始JavaEE篇——多线程(7):定时器、CAS
  • 高精度计算(乘)
  • 在vue中 如何实现跨域
  • 计算机考研,选择西安交通大学还是哈工大?
  • 微积分复习笔记 Calculus Volume 1 - 4.4 The Mean Value Theorem
  • Cpp多态机制的深入理解(20)
  • (六)Python结构数据类型