Я использую Python версии 2.7.9 и пытаюсь отправить файл png. Но происходит что-то странное... я использую сокеты и отправляю почтовый запрос (или вроде того). Я отправляю запрос на сервер от клиента, затем я печатаю длину запроса, полученного на сервере, например, длина: 1051.
Затем я делаю регулярное выражение, чтобы взять данные файла png, а затем печатает длину, а длина составляет 2632, что он больше, чем ответ?!
Я думаю проблема в том, что пишется собственно содержание, а не право представления, я пробовал разные вещи но они не работали, поэтому спрашиваю здесь как решить эту проблему.
Исходный код сервера:
import socket
import re
server = socket.socket()
server.bind(('0.0.0.0',8080))
while True:
server.listen(2)
(client, client_addr) = server.accept()
print 'IP :',client_addr
res = client.recv(0xfffffff)
print len(res)
#get file name
file_name = res.split('&')[0]
file_name = str(file_name.split('=')[1])
print repr(res)
#get the data of the file
raw_img = str(re.findall("&photo_data=(.*)" ,res ,re.DOTALL))
print "File name:" + file_name
print "Size:" + str(len(raw_img))
with open(file_name, 'wb') as f:
f.write(raw_img)
print "Done"
Исходный код клиента:
import socket
client = socket.socket()
client.connect(('127.0.0.1',8080))
raw_data = open('test.png', 'rb').read()
save_file_name = raw_input("Enter the file name:")
print len(raw_data)
output = 'POST /upload HTTP/1.1\r\n'
output += 'Content-Length:' + str(len(raw_data)) + str(len(save_file_name)) + '\r\n\r\n'
output += 'file_name=' + save_file_name + '&'
output += 'photo_data=' + raw_data
print len(output)
client.send(output)
client.close()
res = client.recv(0xfffffff)может не быть полным png. Продолжайте читать сокет в цикле, пока он не вернет строку нулевой длины. - person tdelaney   schedule 01.05.2015