首页 > 解决方案 > “无效的继续字节” Python Socket

问题描述

我是业余爱好者,我的插座有问题。使用该程序,我想通过套接字访问另一台计算机并下载文件。我试图自己解决它,但我做不到。我什至查看了几个论坛并没有找到解决方案。

感谢您的任何帮助!我真的很喜欢学习新事物。

这是代码:

服务器:

import socket

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind(("", 4444))
socket.listen(1)
client, addr = socket.accept()


def navigate():
    while True:
        directory = client.recv(1024).decode()
        global chose
        chose = input(directory + " $:")
        if chose.startswith("download"):
            download()
        if chose.startswith("cd"):
            client.send(bytes(chose, "utf-8"))
            files = client.recv(5000).decode()
            print("\n" + "Files:\n" + files + "\n")


def download():
    splitted_chose = chose[9:]
    client.send(bytes(chose, "utf-8"))
    bytes_len = client.recv(1024).decode("utf-8")
    data = client.recv(int(bytes_len))
    with open("Downloads/" + splitted_chose, "wb") as file:
        file.write(data)
        print(str(splitted_chose) + " downloaded!\n")
        file.close()


navigate()

客户:

import socket
import os

ip = "192.168.178.62"
port = 4444

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect((ip, port))

while True:
    directory = os.getcwd()
    socket.send(bytes(directory, "utf-8"))
    command = socket.recv(1024).decode()

    if command.startswith("cd"):
        splitted_input = command.split(" ")
        os.chdir(splitted_input[1])
        files = os.listdir()
        string_files = ""
        for file in files:
            string_files += file + ", "
        socket.send(bytes(string_files, "utf-8"))

    if command.startswith("download"):
        splitted_command = command[9:]
        path = directory + "/" + splitted_command
        bytes_len = os.path.getsize(path)
        bytes_len_str = str(bytes_len)
        socket.send(bytes(bytes_len_str, "utf-8"))

        with open(path, "rb") as f:
            data = f.read()
            socket.send(data)
            f.close()

控制台输出:

    Traceback (most recent call last):
  File "C:/Users/jonny/PycharmProjects/Batman/Server.py", line 33, in <module>
    navigate()
  File "C:/Users/jonny/PycharmProjects/Batman/Server.py", line 15, in navigate
    download()
  File "C:/Users/jonny/PycharmProjects/Batman/Server.py", line 25, in download
    bytes_len = client.recv(1024).decode("utf-8")
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 5: invalid start byte

标签: python-3.xsockets

解决方案


推荐阅读