avatar

刘刚刚的blog

采菊东篱下,悠然见南山🦥

  • 首页
  • 大模型应用
  • 常用软件/工具
  • Halo
  • 关于
Home python标准库-socketserver的使用
文章

python标准库-socketserver的使用

Posted 2020-09-7 Updated 2024-12- 10
By Administrator
3~5 min read

python内置的socket单独是使用时不直接支持并发的,socketserver将socket模块和select模块进行了封装,可以使服务端更方便的处理socket请求。


socketserver是python标准库的模块之一,使用方法:

  • 创建一个请求处理类,继承BaseRequestHandlerclass类并且重写父类的handle()方法,该方法将处理传入的请求。

  • 实例化一个上面类型中的一个类(如TCPServer)传递服务器的地址和你创建的请求处理类 给这个TCPServer。

  • 调用serve_forever()方法来处理请求。

服务端代码:

import socketserver

# 需要定义一个类,并继承tcp相关的类socketserver.BaseRequestHandler
class MyRequestHandle(socketserver.BaseRequestHandler):
    
    # 实现handle方法,处理收到的数据
    def handle(self):
        # 链接的对象为:self.request
        # 客户端的地址为:self.client_address)
        while True:
            try:
                msg = self.request.recv(1024)
                if len(msg) == 0: break
                # 发送消息
                self.request.send(msg.upper())
            except Exception:
                break
        # 如果断开则关闭连接
        self.request.close()


# 服务端应该做两件事
# 循环地从半连接池中取出链接请求与其建立双向链接,拿到链接对象
s=socketserver.ThreadingTCPServer(('127.0.0.1',8888),MyRequestHandle)
# 处理多个请求
# 如果只想处理一个请求,可以使用ser.handle_request()  
s.serve_forever()

UDP服务端代码:

import socketserver

class MyRequestHanlde(socketserver.BaseRequestHandler):
    def handle(self):
        client_data=self.request[0]
        server=self.request[1]
        client_address=self.client_address
        server.sendto(client_data.upper(),client_address)

s=socketserver.ThreadingUDPServer(("127.0.0.1",8888),MyRequestHanlde)
s.serve_forever()

python
python
License:  CC BY 4.0
Share

Further Reading

Apr 21, 2025

Typing

类型注释让python 有了更好的编辑器提示功能。 基础使用 对函数参数和返回值,进行类型注释 def surface_area_of_cube(edge_length: float) -> str:    return f"The surface area of the cube is {6 *

Feb 25, 2025

python多进程多线程下的计数及日志打印

注意点: 需要保证在多进程内的进程锁是同一个 需要保证在单进程中的多线程内线程锁是同一个 # logger.py import multiprocessing import threading ​ ​ class Logger_test:    def __init__(self, process

Dec 25, 2022

python-迭代器、生成器、协程

迭代器 Python中当容器对象提供了对迭代的支持时,可以通过container.__iter__()来返回一个迭代器对象。 迭代器需要支持以下两个方法,这两个方法共同构成了迭代器协议: iterator.__iter__() 该方法返回迭代器本身,这个方法是配合for和in使用所必须的。 iter

OLDER

编程基础--tcp/ip协议(2)

NEWER

python基础-基于tcp/ip、udp的Scoket使用

Recently Updated

  • 文本切分-语义分割(Semantic Chunking)
  • dify 并发配置优化
  • Typing
  • 大模型返回中json_schema与json_mode的区别
  • Async

Trending Tags

Halo 运维 postgresql 设计模式 linux就该这么学 nas rag odoo python 文本切分

Contents

©2025 刘刚刚的blog. Some rights reserved.

Using the Halo theme Chirpy