Проверьте возвращаемое значение send
и recv
. Значение 9000000
- это максимум , но не гарантированное значение для отправки / записи. Или используйте sendall
.
Для recv
вы должны зацикливаться, пока не получите все данные. Если вы закроете сокет после отправки файла, recv
вернет ноль при получении всех данных.
К вашему сведению, ваш while True:
в обоих файлах никогда не зацикливается из-за break
, поэтому они не нужны.
Вот кое-что, что должно работать ...
server.py
import socket
soc = socket.socket()
soc.bind(('',8080))
soc.listen(1)
print('waiting for connection...')
with soc:
con,addr = soc.accept()
print('server connected to',addr)
with con:
filename = input('enter filename to send: ')
with open(filename, 'rb') as file:
sendfile = file.read()
con.sendall(sendfile)
print('file sent')
client.py
import socket
soc = socket.socket()
soc.connect(('localhost',8080))
savefilename = input("enter file name to receive: ")
with soc,open(savefilename,'wb') as file:
while True:
recvfile = soc.recv(4096)
if not recvfile: break
file.write(recvfile)
print("File has been received.")