Socketserver学习

Socketserver分析图


提示:以下是本篇文章正文内容,下面案例可供参考

一、Socketserver分析图

在这里插入图片描述

Socketserver分析图:
       主要是基于ThreadingTCPServer类的实例化,其中包括传入的server_address 和 RequestHandlerClass类,重要的是其中各类与其基类的继承和有关server对象的实例方法使用。
       个人觉得比较重要的一点需要关注一下,就是BaseServer类中有关finish_request方法的介绍,self.RequestHandlerClass(request, client_address, self)中的self其实在这里指的是该ThreadingTCPServer类的实例对象server,自己调用自己,则用self;而对于Myserver类来讲,他继承的是BaseRequestHandler类,其中执行self.handle()的方法名,这里自定义的时候切不可更改该名称,这里实际上是对于handle方法的重写。

       另外就是涉及到多线程的应用,threading.Thread创建新的线程,每个线程都执行process_request_thread,即:self.RequestHandlerClass(request, client_address, self),即执行我们自定义的Myserver类的实例化以及重写后的handle方法。

class ThreadingMixIn:
	def process_request_thread(self, request, client_address):
		self.finish_request(request, client_address)
	def process_request(self, request, client_address):
		threading.Thread(target = self.process_request_thread,args = (request, client_address))
		t.start()

二、使用步骤

1. 服务端

import socketserver

class Myserver(socketserver.BaseRequestHandler):

    def handle(self):

            while 1:
                client_data=self.request.recv(1024)
                if len(client_data)==0:
                      print("客户端断开连接,等待新的用户连接....")
                      break
                print ("接受数据 >>>",str(client_data,"utf8"))
                response=input("响应数据 >>>")
                self.request.sendall(bytes(response,"utf8"))

            self.request.close()


server=socketserver.ThreadingTCPServer(("127.0.0.1",8888),Myserver) 
server.serve_forever()    # 开启了多线程socket.accpet()

2. 客户端

import socket
ip_port = ('127.0.0.1',8888)
sock = socket.socket()
sock.connect(ip_port)
print ("客户端启动:")

while True:

    inp = input('发送数据 >>>')
    if inp == 'exit':
        break
    sock.sendall(bytes(inp,"utf8"))
    server_response=sock.recv(1024)
    print ("服务端响应数据 >>>",str(server_response,"utf8"))

sock.close()

总结

学习socketserver

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值