2、socketserver实现并发

1、TCP_socketserver服务器端:

复制代码
# -*- coding:utf-8 -*-
import socketserver

class Myserver(socketserver.BaseRequestHandler):
    def handle(self):
        print('conn is:', self.request)
        print('addr is:', self.client_address)

        while True:
            try:
                data = self.request.recv(1024)
                if not data:break
                print('收到的客户端消息:', data)

                self.request.sendall(data.upper())
            except Exception as e:
                print(e)
                break

if __name__ == '__main__':
    s = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), Myserver) #多线程
    # s = socketserver.ForkingTCPServer(('127.0.0.1', 8080), Myserver) #多进程
    print(s.server_address)
    print(s.RequestHandlerClass)
    print(s.socket)
    print(Myserver)
    s.serve_forever()
复制代码

2、TCP_socketserver客户端:

复制代码
# -*- coding:utf-8 -*-
from socket import *

HOST = '127.0.0.1' # 服务器的主机号和端口号
PORT = 8080
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpCliSock = socket(AF_INET, SOCK_STREAM)  #TCP客户端套接字
tcpCliSock.connect(ADDR) # 主动连接到TCP服务器

while True:
    data = input('>>')
    if not data:#如果本客户端发送的消息是空的,则跳出此次循环
        continue
    tcpCliSock.send(data.encode('utf-8'))
    data = tcpCliSock.recv(BUFSIZ)
    print(data.decode('utf-8'))

tcpCliSock.close()
复制代码

3、UDP_socketserver服务器端:

复制代码
# -*- coding:utf-8 -*-
import socketserver

class Myserver(socketserver.BaseRequestHandler):
    def handle(self):
        print(self.request)
        print('收到的客户端消息:', self.request[0])
        #发消息
        self.request[1].sendto(self.request[0].upper(), self.client_address)

if __name__ == '__main__':
    s = socketserver.ThreadingUDPServer(('127.0.0.1', 8080), Myserver) #多线程
    s.serve_forever()
复制代码

4、UDP_socketserver客户端:

复制代码
# -*- coding:utf-8 -*-
from socket import *

ip_port = ('127.0.0.1', 8080)
BUFSIZE = 1024
udpCliSocket = socket(AF_INET, SOCK_DGRAM)

while True:
    msg = input('>>:').strip()
    if not msg:continue
    udpCliSocket.sendto(msg.encode('utf-8'), ip_port)

    back_msg, addr = udpCliSocket.recvfrom(BUFSIZE)
    print(back_msg.decode('utf-8'), addr)
复制代码

5、socketserver模块分析

socketserver模块中分为两大类:server类(解决连接问题)、request类(解决通信问题)

(1)server类:

 

(2)request类

 

posted @   cheng4632  阅读(121)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示