服务器端:
import random
import socketserver
# 使用socketserver这个模块需要定义一个类
class MyServer(socketserver.BaseRequestHandler):
"""
# 首先执行setup
# 然后执行handle
# 最后执行finish
# 一般只重写handle方法
# 如果handle方法出现报错,则会进行跳过
# 而setup方法和finish方法无论如何都会执行
"""
def setup(self):
pass
def handle(self):
# 定义连接变量
conn = self.request
# 发送消息定义
msg = "您已连接! "
# 消息发送
conn.send(msg.encode())
while True:
print("等待信息...")
data = conn.recv(1024) # 接收客户端消息
print(data.decode()) # 打印消息
if data == b'exit':
break
str_ = '您输入的是: '
conn.send(str_.encode() + data) # 把信息发回客户端
conn.send(str(random.randint(1, 1000)).encode()) # 多送一个随机数
conn.close()
def finish(self):
pass
if __name__ == '__main__':
# 创建多线程实例
server = socketserver.ThreadingTCPServer(("127.0.0.1", 8888), MyServer)
# 开启异步多线程,等待连接
server.serve_forever()
客户端:
import socket
client = socket.socket()
ip_port = ('127.0.0.1', 8888)
client.connect(ip_port)
#定义一个循环不断发送消息
while True:
# 接收数据
data = client.recv(1024)
# 打印接收
print(data.decode())
msg_input = input('请输入要发送的消息')
#发送
client.send(msg_input.encode())
if msg_input == 'exit':
print("\n正在退出...")
break
# 服务器端发送了2次,这里也第二次接收数据
data = client.recv(1024)
# 打印接收
print(data.decode())