都可以运行,但是client发送一个信息后,会报错???
服务器:
#coding = utf-8 import random import socketserver class MyServer(socketserver.BaseRequestHandler): #如果handle方法出现报错,则会进行跳过 #setup方法和finish方法无论如何都会进行执行 #首先执行setup方法 def setup(self): pass #然后执行handle方法 def handle(self): #定义连接变量 conn = self.request #定义发送消息 msg = "Hello World" #发送消息 conn.send(msg.encode()+"已发送消息") #进入循环,不断接收信息 while True: #定义接收客户端消息 data = conn.recv(1024) #打印接收的消息 print(data.decode()) #如果接收到exit 则进行循环的退出 if data == b"exit": break #否则返回接收数据 conn.send(data) #并发送一个随机数 conn.send(random.randint(1,200).encode()) #关闭连接对象 conn.close() #最后执行finish方法 def finish(self): pass if __name__ == '__main__': #创建多线程实例 server = socketserver.ThreadingTCPServer(("127.0.0.1",8888),MyServer) #开启异步多线程,等待客户端连接 server.serve_forever()
客户端:
#coding = utf-8 #导入模块 import socket #创建实例 client = socket.socket() #访问的ip地址和port端口 ip_port = ("127.0.0.1",8888) #连接主机 client.connect(ip_port) #定义一个循环,不断的接收和发送消息 while True: #接收第二个服务器信息 data = client.recv(1024) #1024表示接受缓冲的数据为1024个byte字节 #打印接受的数据 #此处的byte型数据特质python3.x以上 print(data.decode()) #因为3.x直接接受的byte型数据,需要decode方法进行解码 #输入发送的消息 msg_input = input("请输入发送信息:") #发送消息 client.send(msg_input.encode()) if msg_input == "exit": break #接收第一个服务器信息 data = client.recv(1024) print(data)
运行结果: