Не получается передать изображение по сокетам

Мне дали задание отправить с клиента фотографию на сервер на питоне по сокетам, я раньше таким никогда не занимался, с сокетами работал но изображения понятия не имею как отправлять, нашел один сайт там приводился код для клиента и сервера, я его под себя немного подстроил и серверу вроде что то отслылается, после сервер сохраняет картинку на рабочий стол (скрипт сервера находится на удаленном компе) но я почему то не могу открыть изображение (пишет типо файл поврежден) вот код который я использую(честно говоря много разобраться и понять в нем не получилось, помогите пожалуйста что исправить и что не так):

Server:

import random
import socket, select
from time import gmtime, strftime
from random import randint

imgcounter = 1
basename = "image%s.png"

HOST = '0.0.0.0'
PORT = 6666

connected_clients_sockets = []

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((HOST, PORT))
server_socket.listen(10)

connected_clients_sockets.append(server_socket)
buffer_size = 4096

while True:

    read_sockets, write_sockets, error_sockets = select.select(connected_clients_sockets, [], [])



    for sock in read_sockets:

        if sock == server_socket:

            sockfd, client_address = server_socket.accept()
            connected_clients_sockets.append(sockfd)

        else:
            try:
                print (' Buffer size is %s' % buffer_size)
                data = sock.recv(buffer_size)
                txt = str(data)

                if txt.startswith('SIZE'):
                    tmp = txt.split()
                    size = int(tmp[1])

                    print ('got size')
                    print ('size is %s' % size)

                    sock.send("GOT SIZE")
                    # Now set the buffer size for the image
                    buffer_size = 40960000

                elif txt.startswith('BYE'):
                    sock.shutdown()

                elif data:

                    myfile = open(basename % imgcounter, 'wb')

                    # data = sock.recv(buffer_size)
                    if not data:
                        myfile.close()
                        break
                    myfile.write(data)
                    myfile.close()

                    sock.send("GOT IMAGE")
                    buffer_size = 4096
                    sock.shutdown()
            except:
                sock.close()
                connected_clients_sockets.remove(sock)
                continue
        imgcounter += 1
server_socket.close()

Client:

import socket, select
from time import gmtime, strftime
from random import randint

image = "/Users/gamerboss/Documents/tux.png"

HOST = '94.103.88.125'
PORT = 6666

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = (HOST, PORT)
sock.connect(server_address)

try:

    # open image
    myfile = open(image, 'rb')
    bytes = myfile.read()
    size = len(bytes)

    # send image size to server
    sock.sendall(("SIZE %s" % size).encode())
    answer = sock.recv(4096)

    print ('answer = %s' % answer)

    # send image to server
    if answer == 'GOT SIZE':
        sock.sendall(bytes)

        # check what server send
        answer = sock.recv(4096)
        print ('answer = %s' % answer)

        if answer == 'GOT IMAGE':
            sock.sendall("BYE BYE ")
            print ('Image successfully send to server')

    myfile.close()

Ответы (0 шт):