Я попытался отправить изображение через сокет в python. При отправке его с моего компьютера на мой компьютер прекрасно работает , но при попытке отправить его с моего компьютера на другой компьютер изображение не доставляется или получается неправильно. По какой-то причине размер файла .jpg увеличился с 2,67 МБ до 1,73 МБ ... Вот сервер и клиент, а также изображение до и после его отправки. Кто-нибудь знает, почему и как это исправить?
Server.py
import socket
def main():
server_socket = socket.socket()
server_socket.bind(('0.0.0.0', 8118))
server_socket.listen(1)
(client_socket, client_address) = server_socket.accept()
length = client_socket.recv(7)
length = int(length)
data = ""
if length > 10000:
dev = length / 10000
for i in range(0, dev):
data = data + client_socket.recv(10000)
length = length - 10000
data = data + client_socket.recv(length)
f = open('test.jpg', "wb")
f.write(data.decode('base64'))
f.close()
client_socket.close()
server_socket.close()
if __name__ == '__main__':
main()
Client.py
import socket
import base64
def main():
my_socket = socket.socket()
try:
my_socket.connect(('192.168.0.107', 8118))
except:
print 'connection failed'
my_socket.close()
return
with open('C:/test/test.jpg', "rb") as sfile:
data = base64.b64encode(sfile.read())
length = len(data)
length = str(length)
for i in range(len(length), 7):
length = '0' + length
my_socket.send(length)
length = int(length)
if length > 10000:
dev = length / 10000
for i in range(0, dev):
my_socket.send(data[:10000])
data = data[10000:]
length = length - 10000
my_socket.send(data)
my_socket.close()
if __name__ == '__main__':
main()
отправленное изображение screenshot.jpg
полученное изображение screenshot2.jpg