python-3.x - “无效的继续字节” 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