说明:
在python的socket编程中,实用socket模块的时候,是不能实现多个连接的,当然如果加入其它的模块是可以的,例如select模块,在这里见到的介绍下socketserver模块。
socketserver,看其名字,就知道是一个socket的服务器模块的使用,在这个模块中,主要也就是实现服务器类的相关功能,在其中,也就是将socket模块和select模块进行了封装,从而创建了一些基类供人使用。
socketserver框架是一个基本的socket服务器端框架, 使用了threading来处理多个客户端的连接, 使用seletor模块来处理高并发访问, 是值得一看的python 标准库的源码之一
------------
socketserver和socket编程的区别是:socketserver可以和多个client端同时进行通信.在单纯的socket编码中,同时只能一个进行通信,其他的连接会被阻塞。
参考:python socketserver_阿紫_PP的博客-优快云博客
服务端:
import socketserver
"""
this is demo exicise
"""
class MyServer(socketserver.BaseRequestHandler):
"""
"""
def handle(self):
print("conn is :",self.request) # conn
print("addr is :",self.client_address) # addr
while True:
try:
# 接收消息
data=self.request.recv(1024)
if not data:
break
print("收到客户端发来的消息是:",data.decode("utf-8"))
# 发送消息
self.request.sendall(data.upper())
except Exception as e:
print(e)
break
# self.data=self.request.recv(1024).strip()
# print("{} wrote:".format(self.client_address[0]))
# print("客户端发来的数据:",self.data)
# self.request.sendall(self.data.upper())
if __name__ == '__main__':
host,port = "172.20.137.118",1234
print(host,port)
s=socketserver.ThreadingTCPServer((host,port),MyServer)
s.serve_forever()
# with socketserver.TCPServer((host,port),MyTCPHandler) as server:
# # Activate the server; this will keep running until you
# # interrupt the program with Ctrl-C
# server.serve_forever()
客户端:
import socket
import time
host,port = "172.20.137.118",1234
class MyClient():
def client(self):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
while True:
message="hello,world!"
s.send(message.encode())
time.sleep(3)
# data=s.recv(1024)
# data=data.decode()
# if not data:
# break
# print(data)
# s.sendall(data.encode())
# print("返回了一样的数据信息")
s.close()
if __name__ == "__main__":
main=MyClient()
main.client()