python有两个socket,为什么有两个socket呢?
其实主要原因还是:为了方便,还有多并发。
一 socketserver的模块介绍:
在python的socket编程中,实用socket模块的时候,是不能实现多个连接的,当然如果加入其它的模块是可以的,例如select模块,在这里见到的介绍下socketserver模块。
socketserver,看其名字,就知道是一个socket的服务器模块的使用,在这个模块中,主要也就是实现服务器类的相关功能,在其中,也就是将socket模块和select模块进行了封装,从而创建了一些基类供人使用。
socketserver框架是一个基本的socket服务器端框架, 使用了threading来处理多个客户端的连接, 使用seletor模块来处理高并发访问, 是值得一看的python 标准库的源码之一
二 socketserver
socket不支持多并发,socketserver最主要的作用:就是实现一个并发处理,前面只是铺垫。
socketserver就是对socket的再封装。简化网络服务器版的开发。
三 socketserver的类型
TCP协议
1 class socketserver.TCPServer(server_address, RequestHandlerClass, bind_and_activate=True)
UDP协议
Unix本机之间进程的TCP、UDP(不常用)
类型之间的关系:

说怎么多,我们还是来写socketserver,直观来看看,比较与socket之间的不同。
首先创建一个socketserver要分一下几步:
- 首先,您必须创建一个请求处理类,继承BaseRequestHandlerclass类并且重写父类的handle()方法,该方法将处理传入的请求。
- 必须实例化一个上面类型中的一个类(如TCPServer)传递服务器的地址和你上面创建的请求处理类 给这个TCPServer。
- 调用handle_request()或者serve_forever()方法来处理一个或多个请求。
这里的handle_request和server_forever方法也要区分好
ser.handle_request() # 只处理一个请求,处理完就退出了 ser.serve_forever() # 处理多个请求,永远执行。
最后使用server_close()关闭socket。
好!,了解了基本的步骤之后,开始来写我们的服务端和客户端
服务端:
1 import socketserver 2 ip_port = ('localhost',9090)#地址和端口 3 class MySocket(socketserver.BaseRequestHandler):#创建请求类 4 def handle(self):#重写方法 5 print("kais") 6 while True: 7 data = self.request.recv(1024) 8 print(data) 9 10 if __name__ == '__main__': 11 s = socketserver.ThreadingTCPServer(ip_port,MySocket)#绑定地址和端口 12 s.serve_forever()#处理多个请求
客户端:
import socket#客户端不用改变 sk=socket.socket() sk.connect(('127.0.0.1',9090)) print('client启动') while True: inp=input('>>>>') sk.send(bytes(inp,'utf8')) # server_response=sk.recv(1024) #print(str(server_response,'utf8')) if inp=='q': break sk.close()
学习socket怎么多的内容,是时候展示我们的能力了,所以现在我们来编程一个ftp的程序。验证自己的实力。
(待更新)
浙公网安备 33010602011771号