Попробуйте следующее:
alert($("#something\\["+id+"\\]").parent()[0].parent()[0].attr("id"));
Вариант 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.")
[1114 ] Вариант 3:
Он также будет работать нормально, при условии, что вы уверены, что не будет никакой задержки в сети, и единственной проблемой будет то, что вашей java-программе придется ждать ответа от сервера python до истечения времени ожидания происходит
Вариант 4:
Вы можете использовать неблокирующий сокет, который будет работать до тех пор, пока он не будет получен в течение заранее определенного периода времени. Хотя я не рекомендую это для вашей ситуации, вы можете прочитать об этом и посмотреть, соответствует ли это вашим потребностям.
Я бы лично выбрал второй вариант (в сочетании с разумным временем ожидания для обслуживания злых клиентов, которые отправляют только половину файла и остаются там навсегда). Символ разделения - это хорошо, если вы можете абсолютно гарантировать, что он уникален в вашем потоке (но вам все еще нужно время ожидания).
Если вы не можете гарантировать, что ваш разделитель будет уникальным, отправка размера, которого клиент должен ожидать, решит проблему. Если ваши метаданные имеют фиксированную длину, вам не нужно беспокоиться о разделителях и их обнаружении.