不发送完整的文件大小总是 -1

问题描述

这段代码应该是一个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())

并且也不发送确认。