环境是windows 环境.
server端:
import socket import subprocess ss = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) ip_port = ("127.0.0.1",8080) ss.bind(ip_port) while True: data,addr = ss.recvfrom(1024) re = data.decode() info = subprocess.Popen(re,shell=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE) if info.stderr.read(): info2 = "输入错误!".encode("gbk") else: info2 = info.stdout.read() ss.sendto(info2,addr)
clinet端:
#coding:gbk import socket ip_port = ("127.0.0.1",8080) cli = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) while True: data = input(">>>:") cli.sendto(data.encode("utf-8"),ip_port) data2,addr = cli.recvfrom(5120) data3 = data2.decode("gbk") print(data3)
反思:
问题:经subprocess转换的数据编码为系统编码,而我当前用的是windows系统,所以默认编码为GBK编码,所以clinet端发送接收后的数据不能转换成UTF8的编码,只能转换为GBK编码.
在Linux环境没有测试.