server类 import socket import subprocess sk = socket.socket() #创建socket #添加地址bind绑定 address = ("127.0.0.1",9595) sk.bind(address) #支持多少人 sk.listen(2) #接收客户端信息 while True: conn,addr = sk.accept() print(addr,"这个位置是下一次另一个客户端打开后能自动接收") while True: try: cr = conn.recv(1024) except Exception as e: #如果直接点击客户端直接点击 print("jimao------",e) break # print(cr, "--nn------------") # 判断客户端停止后返回值 if not cr:break print(cr, "--------------") # 判断客户端停止后返回值 data = str(cr, "utf8") # print(str(cr)) #这个不能接收中文,只能接收字母数字 # 发送信息 #stdout 标准输出 PIPE 管道 Popen 打开进程文件指针 #stdout=subprocess.PIPE子线程通过管道输出到主线程 obj = subprocess.Popen(data,shell=True,stdout=subprocess.PIPE) obj_read = obj.stdout.read() #接收指令data,再格式化输出 print("iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",type(obj)) #计算长度,传递到客户端来判断客户端是否继续接收 len_write = len(obj_read) conn.sendall(bytes(str(len_write),"utf8")) #发送接收到的指令长度发送到客户端 conn.sendall(obj_read)
clinet类 import socket sk = socket.socket() #创建socket对象 #连接服务端 address = ("127.0.0.1",9595) sk.connect(address) #发送信息到服务端 while True: inp = input("这是客户端:") if inp == "88": exit() else: sk.send(bytes(inp,"utf8")) #接收信息 sr = sk.recv(1024) # print("00000000000000",type(sr)) sr_len = int(str(sr,"utf8")) #把传过来的byte长度转换成int型 print("-----------",sr_len,"---",sr) if sr: num = bytes() #创建一个 #接收的长度和总和和传过来的长短一样时就返回 while len(num) != sr_len: # 再次接收文件 sk_len = sk.recv(1024) # 第二次接收byte型类型 num += sk_len # 把第二次接收的byte类型写进num中 # print(str(sk_len,"gbk")," print(str(num, "gbk")) else: break