Опция 1:
Таким образом, для первого варианта вы можете установить конечный байт, который не будет нигде в вашем фактическом сообщении.Вы можете создать строку, например, для "END", преобразовать ее в байтовый массив и отправить через вашу Java-программу.После получения вы можете использовать decode (), чтобы преобразовать его в строку и сравнить.:
Примечание. Конечный байт, который вы отправите, должен быть меньше или равен размеру фрагмента для декодирования и получения точного конечного байта.
byte_array = bytearray()
# receive the data in small chunks and print it
while True:
data = connection.recv(64)
command = data.decode()
if command != "END":
# output received data
logger.debug("Data: %s" % data)
byte_array.extend(data)
else:
# no more data -- quit the loop
logger.debug("no more data.")
break
logger.info("Generating response...")
connection.send(generate_response(byte_array))
logger.info("Sent response.")
Вариант 2:
Для второго варианта вам потребуется изменить цикл while для выполнения в соответствии с метаданными.Я считал, что метаданные будут состоять из первого чанка, который будет количеством чанков, которые будут отправлены. Это может быть что-то вроде:
byte_array = bytearray ()
# receive the data in small chunks and print it
loop_count = 0
count = 1
meta = 1
while loop_count >= count:
data = connection.recv(64)
if(meta):
count = int(data.decode()) # first chunk is the number of chunks that will be sent
meta = 0
logger.debug("Data: %s" % data)
byte_array.extend(data)
loop_count = loop_count + 1
else:
# no more data
logger.debug("no more data.")
logger.info("Generating response...")
connection.send(generate_response(byte_array))
logger.info("Sent response.")
Вариант 3:
Он также будет работать нормально, если вы уверены, что не будет никакой задержки в сети, и единственной проблемой будет то, что вашей java-программе придется ждать ответа от сервера python до истечения времени ожиданияпроисходит
Вариант 4:
Вы можете использовать неблокирующую розетку, которая будет работать до тех пор, пока она не будет получена в течение предварительно определенного периода времени.Хотя я не рекомендую это для вашей ситуации, вы можете прочитать об этом и посмотреть, соответствует ли это вашим потребностям.