Python提供了两个基本的socket模块。一个是socket,它提供了标准的BSD Socket API;
另一个是socketServer就是对socket的再封装,它提供了服务器中心类,可以简化网络服务器的开发。
socketserver最主要的作用:就是实现一个并发处理
1、socketserver一共有这么几种类型:
1、TCP 协议
class socketserver.TCPServer(server_address, RequestHandlerClass, bind_and_activate=True)
2、UDP 协议
class socketserver.UDPServer(server_address, RequestHandlerClass, bind_and_activate=True)
3、Unix 本机之间进程的TCP、UDP (不常用)
class socketserver.UnixStreamServer(server_address, RequestHandlerClass, bind_and_activate=True)
class socketserver.UnixDatagramServer(server_address, RequestHandlerClass,bind_and_activate=True)
2、创建一个socketserver 至少分以下几步:
首先,您必须创建一个请求处理类,继承BaseRequestHandlerclass类并且重写父类的handle()方法,该方法将处理传入的请求。
其次,你必须实例化一个上面类型中的一个类(如TCPServer)传递服务器的地址和你上面创建的请求处理类 给这个TCPServer。
然后,调用handle_request()或者serve_forever()方法来处理一个或多个请求。
ser.handle_request() # 只处理一个请求,处理完就退出了
ser.serve_forever() # 处理多个请求,永远执行。
最后,调用server_close()关闭socket。
3、socketserver服务器端和客户端代码
server.py
import socketserver
ip_post = ('127.0.0.1',8898)
class Myserver(socketserver.BaseRequestHandler):
def handle(self):
print("conn is:",self.request) #conn conn,addr = sock.accept()
print("addr is:",self.request) #addr conn,addr = sock.accept()
while True:
try:
data = self.request.recv(1024) #收消息
print('收到客户端的消息是',data)
#发消息
self.request.sendall(data.lower())
except Exception as e:
print(e)
break
if __name__ == '__main__':
s=socketserver.ThreadingTCPServer(ip_post,Myserver) #创建了一个线程的TCP服务器类,也就是通过多线程来进行应答客户端
s.serve_forever()
client.py
from socket import *
ip_port = ('127.0.0.1', 8898)
buffer_size =1024
tcp_client = socket(AF_INET, SOCK_STREAM)
tcp_client.connect(ip_port)
while True:
cmd = input('请输入字母>>>').strip()
if not cmd: continue
if cmd == 'quit': break
tcp_client.send(cmd.encode('utf-8'))
data =tcp_client.recv(buffer_size)
print('收到服务端返回的结果', data.decode('utf-8'))
tcp_client.close()
2092

被折叠的 条评论
为什么被折叠?



