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的程序。验证自己的实力。

 

 

(待更新)

posted on 2020-03-10 15:04  学习永远没有尽头  阅读(197)  评论(0)    收藏  举报