Python Socket跨设备传输数据时的编码解码错误求助
Socket跨机器传输时的编码解码错误求助
我是Socket编程的新手,目前正在学习基础内容。我的代码在单台计算机上运行正常,但在两台不同的计算机间进行测试时,出现了编码/解码相关的错误。我尝试了多种编码格式,但均未解决问题。以下是我的server.py、client.py代码,以及尝试不同编码时对应的错误信息,恳请大家帮忙解决。
server.py
import socket import threading SERVER="192.168.1.4" PORT=5051 ADDR=(SERVER, PORT) SIZE=1024 FORMAT='utf-8' server=socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(ADDR) def getfile(conn: socket.socket, addr): print(f"[NEW CONNECTION] Connected : {conn}") connected=True while connected: fname=conn.recv(SIZE).decode(FORMAT) if fname=="!disconnect": connected=False break print("[RECV] Receiving the file name") file=open(fname,"wb") conn.send("[ACK] Received the file name".encode(FORMAT)) print("Receiving the file data") data=conn.recv(SIZE) while data: file.write(data) file.flush() if len(data)<SIZE: break data=conn.recv(SIZE) conn.send("[ACK] Received the data".encode(FORMAT)) file.close() print(f"[DISCONNECTED] {conn} - disconnected") conn.close() def start(): server.listen() print(f"Server is listening on : {SERVER}") while True: conn, addr=server.accept() threading.Thread(target=getfile, args=(conn, addr)).start() print(f"[CONNECTIONS] Number of active connections : {threading.active_count()-1}") print("[STARTING] Server is starting...") start()
client.py
import socket import threading SERVER="192.168.1.4" PORT=5051 ADDR=(SERVER, PORT) SIZE=1024 FORMAT='utf-8' client=socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(ADDR) def send(): file=open("tpic.jpeg","rb") client.send("nfile.jpeg".encode(FORMAT)) msg=client.recv(SIZE).decode(FORMAT) print(f"[SERVER] {msg}") data=file.read(SIZE) while data: client.send(data) if len(data)<SIZE: break data=file.read(SIZE) msg=client.recv(SIZE).decode(FORMAT) print(f"[SEVRER] {msg}") file.close() send() client.send("!disconnect".encode(FORMAT))
错误信息
当
FORMAT='utf-8'时,出现以下Unicode解码错误:line 17, in getfile fname=conn.recv(SIZE).decode(FORMAT) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x95 in position 0: invalid start byteline 17, in getfile fname=conn.recv(SIZE).decode(FORMAT) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 1: invalid continuation byteline 17, in getfile fname=conn.recv(SIZE).decode(FORMAT) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xea in position 0: invalid continuation byte当
FORMAT='utf-16'时:line 17, in getfile fname=conn.recv(SIZE).decode(FORMAT) UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 12-13: illegal UTF-16 surrogate当
FORMAT='ISO-8859-1'时:line 22, in getfile file=open(fname,"wb") ValueError: embedded null byte
内容的提问来源于stack exchange,提问作者Learn
相关产品推荐
相关产品推荐

