You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 byte
    
    line 17, in getfile
    fname=conn.recv(SIZE).decode(FORMAT)
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf4 in position 1: invalid continuation byte
    
    line 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:50:28