Я использовал Python и TCP-соединение для создания сервера, который читает изображение, отправленное клиентом.Затем сервер получает код цвета и отправляет код цвета клиенту.
Все работает нормально, за исключением того, что сервер не получает полный файл (изображение в моем случае).
Полагаю, я не могу заставить цикл работать, потому что сервер действительно получает все изображение, если я изменю код сценария server.py (см. Код ниже) с img = connectionSocket.recv(2048)
на img = connectionSocket.recv(200000)
Я хочу, чтобы это работало, чтобы сервер получал все изображение без изменения размера буфера в recv()
function
Вот сценарии client.py и server.py
Client.py
from socket import *
from PIL import Image
IP = '127.0.0.1'
PORT = 5000
#cSocket - created client socket
#img - sent image to the server
#ccode - colour code of the colour in the image
cSocket = socket(AF_INET, SOCK_STREAM)
cSocket.connect((IP,PORT))
with open ('Image.bmp','rb') as im:
img = im.read()
cSocket.sendall(img)
print('Sent the image to the server..')
cCode=cSocket.recv(2048)
print('The colour code of the sent image is: ' + cCode.decode())
cSocket.close()
Server.py
from socket import *
from PIL import Image
import io
import PIL
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
IP = '127.0.0.1'
PORT = 5000
#sSocket - created server socket
#img - image received from the client
#cCode - colour code of the image
sSocket = socket(AF_INET, SOCK_STREAM)
sSocket.bind((IP,PORT))
sSocket.listen(1)
print ('The server is ready')
while 1:
connectionSocket, addr = sSocket.accept()
img = connectionSocket.recv(2048)
if not img:
break
print (str(img))
t_img = io.BytesIO(img)
img = Image.open(t_img)
cCode = img.getcolors(256)
cCode = str(cCode)
print (cCode)
connectionSocket.send(cCode.encode())
connectionSocket.close()