Это код, над которым я работаю, и в настоящее время он передает только .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)