问题描述
这段代码应该是一个p2p文件共享python代码。它发送文件,但不发送完整大小。我不知道这样做有什么问题。首先我遇到了解码错误并搜索它并获得了编码器。除此之外,该文件没有显示并且已修复。现在文件正在显示,但它没有发送完整大小。当我尝试打开发送的文件时,出现“损坏”或“文件类型错误” 这是 server.py
import os
import socket
import time
import math
sock = socket.socket(socket.AF_INET,socket.soCK_STREAM)
sock.bind((socket.gethostname(),12000))
sock.listen(10)
print("Host Name: ",sock.getsockname())
client,addr = sock.accept()
print("Connected to : ",addr)
file_name = input("File Name:")
file_size = os.path.getsize(file_name)
print("File Size: ",file_size)
client.send(file_name.encode("ISO-8859-1"))
client.send(str(file_size).encode("ISO-8859-1"))
with open(file_name,"rb") as file:
c = 0
start_time = time.time()
while c <= file_size:
ChunkAnnouncer = math.ceil(math.ceil(c) / 5)
print("Chunk Size: ",ChunkAnnouncer)
data = file.read(4096)
if not (data):
break
client.sendall(data)
c += len(data)
end_time = time.time()
print("File Transfer Complete.Total time: ",end_time - start_time)
sock.close()
客户端.py
import socket
import time
import os
host = input("Host Name: ")
sock = socket.socket(socket.AF_INET,socket.soCK_STREAM)
try:
sock.connect((host,12000))
print("Connection Successful")
print("Connected to: ",(host,12000))
except:
print("Connection Failed")
exit(0)
file_name = sock.recv(100).decode()
file_size = sock.recv(100).decode()
print(file_name)
start_time = time.time()
sock.send(file_name.encode())
confirmation = sock.recv(1024)
encoding="ISO-8859-1"
if confirmation.decode(encoding) == "file-doesn't-exist":
print("File Doesn't Exist")
else:
write_name = 'from_server '+file_name
if os.path.exists(write_name) : os.remove(write_name)
with open(write_name,'wb') as file :
while 1:
data = sock.recv(4096)
if not data:
break
file.write(data)
end_time = time.time()
print(file_name,' Downloaded Successfully')
print("Elapsed Time: ",end_time - start_time)
老实说,我看不到错误。如果你能帮上忙..
解决方法
我按如下方式调整了 client.py
并且它起作用了
import socket
import time
import os
host = input("Host Name: ")
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
sock.connect((host,12000))
print("Connection Successful")
print("Connected to: ",(host,12000))
except:
print("Connection Failed")
exit(0)
file_name = sock.recv(100).decode()
file_size = sock.recv(100).decode()
print(file_name)
start_time = time.time()
# sock.send(file_name.encode())
# confirmation = sock.recv(1024)
# encoding="ISO-8859-1"
# if confirmation.decode(encoding) == "file-doesn't-exist":
# print("File Doesn't Exist")
# else:
write_name = 'from_server '+file_name
if os.path.exists(write_name):
os.remove(write_name)
with open(write_name,'wb') as file :
while 1:
data = sock.recv(4096)
if not data:
break
file.write(data)
end_time = time.time()
print(file_name,' Downloaded Successfully')
print("Elapsed Time: ",end_time - start_time)
问题是您的服务器不处理来自客户端的响应
# sock.send(file_name.encode())
并且也不发送确认。