программа для передачи файлов изображений всех расширений в сокетную программу (python) с использованием TCP - PullRequest
0 голосов
/ 18 февраля 2020

Это код, над которым я работаю, и в настоящее время он передает только .PNG в .PNG, когда я пытаюсь передать любые другие файлы расширения (например: .jpg to .jpg), файл не открывается и соединение expires. Как я могу заставить это работать для всех расширений файла изображения? Это может быть очень простая вещь, которую я пропускаю. Клиент должен отправить файл изображения на сервер. Сервер сохраняет это.

############### Server.py
from socket import *
import select
import time

buffer_size = 4096
connected_clients_sockets = []
HOST = '192.168.0.5'
imgcounter = 1
basename = "image%d.png"

def create_socket(server_port):
    server_socket_conn = socket(AF_INET, SOCK_STREAM)
    server_socket_conn.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
    server_socket_conn.bind((HOST, server_port))
    server_socket_conn.listen(10)
    connected_clients_sockets.append(server_socket_conn)

    return server_socket_conn


server_port = input("Please, enter TCP connection port number: ")
server_socket = create_socket(int(server_port))

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 %d" % buffer_size)

                data = sock.recv(buffer_size)
                print("------- Received Data ----------")
                print(data)
                print("---------------------------------")

                if data.startswith(b"Size"):
                    tmp = data.decode("utf-8").split()
                    size = int(tmp[1])

                    print(f"Got size {size}")
                    sock.sendall(b"Got size %d data" % size)
                    buffer_size = 40960000

                elif data.startswith(b"Bye"):
                    print("Bye")
                    sock.shutdown()

                elif data:
                    file = open(basename % imgcounter, 'wb')
                    file.write(data)
                    file.close()

                    print("Got Image")
                    sock.sendall(b"Got Image")
                    buffer_size = 4096
                    sock.shutdown()

                    file.write(data)
                    file.close()
                    sock.close()
            except Exception as exc:
                sock.close()
                connected_clients_sockets.remove(sock)
                continue
        imgcounter += 1
server_socket.close()
########################## Client.py
from socket import *
import select

HOST = '192.168.0.5'

def establish_connection(server_port):
    client_socket = socket(AF_INET, SOCK_STREAM)
    client_socket.connect((HOST, server_port))
    return client_socket

def send_recv_message(client_socket, message):
    file = open(filename,'rb')
    file_data = file.read()
    size = len(file_data)

    client_socket.sendall(b"Size %d" % size)

    response = client_socket.recv(4096)
    print(f"Response: {response}")

    if response.startswith(b"Got size"):

        client_socket.sendall(file_data)
        print("File transfer started...")

        response = client_socket.recv(4096)
        print(f"Response: {response}")

        if response.decode("utf-8") == "Got Image":
            client_socket.sendall(b"Bye Bye")
            print("Image successfully transfered")


server_port = input("Please, enter server TCP connection port number: ")
client_socket = establish_connection(int(server_port))
print("Connection established\n")



filename = "image.png"  # input("Enter filename to be sent: ")

send_recv_message(client_socket, filename)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...