黏包处理:
service端:
(test02) [root@server02 program]# cat my_ssh_service.py #Author:Anliu import socket,os,time server = socket.socket() server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #回收重用端口 #server.bind(("127.0.0.1",8888)) server.bind(("0.0.0.0",8888)) server.listen() print("等待数据") while True: conn,addr = server.accept() print("数据来了...") while True: try: data = conn.recv(1024) if not data: break reg = os.popen(data.decode("utf-8")).read() print(reg) if len(reg) == 0: reg = "输入内容为空" conn.send(str(len(reg.encode("utf-8"))).encode("utf-8")) # time.sleep(0.5) client_ack = conn.recv(1024) conn.send(reg.encode()) except ConnectionResetError as key: break # conn.close()
client端:
#Author:Anliu import socket client = socket.socket() #client.connect(("127.0.0.1",8888)) client.connect(("192.168.42.3",8888)) while True: mgs = input(">>>:").strip() if len(mgs) == 0: continue client.send(mgs.encode("utf-8")) data = client.recv(1024) client.send(b"ack") #print(data.decode("utf-8")) cmd_size = 0 received_data = b"" while cmd_size < int(data.decode("utf-8")): cmd_data = client.recv(1024) cmd_size += len(cmd_data) received_data += cmd_data #print(cmd_data.decode("utf-8")) else: #print("命令执行完毕...",cmd_size) print(received_data.decode())