Я пытаюсь отправить файлы (изображения и текст) сокетами в python. Я не хочу создавать новое соединение каждый раз, потому что код записывает много файлов (> 100) за короткий промежуток времени, поэтому я не хочу создавать много соединений, пока они ждут закрытия. Поэтому перед отправкой каждого фрагмента файла я отправляю сначала длину куска. Когда я запускаю его, он дает мне ValueError на length = int(s.recv(4))
, показывая строку из файла и говоря, что он не может быть преобразован в int. Вот часть моего кода, который отправляет и получает один файл: Отправка:Отправка нескольких файлов по одному сокету в python
#Connect s and open file f
s.setblocking(1)
buf = 4096
while True:
msg = f.read(buf)
length = str(len(msg))
if len(length) < 4: length = "0"*(4-len(length)) + length
s.sendall(length)
if length == "0000": break
s.sendall(msg)
if len(msg) != buf: break
Принимающий:
#Connect s and open file f
while True:
length = int(s.recv(4))
if length == 0: break
f.write(s.recv(length))
if length < buf: break
Запуск на Windows 8.
используйте 'socket.htonl' и' socket.ntohl' и отправьте его как двоичный. –
Не могли бы вы рассказать об этом? – Kieran
Почему не удалось использовать ftp или sftp? –