Como obter todo o telegrama do servidor na programação de soquetes quando o número de quadros e o comprimento de cada quadro não é fixo?

esta é minha primeira pergunta e Eng não é minha língua materna. Se eu não descrição clara, por favor me avise.

Antecedentes: no protocolo de comunicação elétrica IEC104, quando o cliente solicita uma vez, o servidor talvez responda com mais de um quadro de telegrama em um pacote de soquete tcp. Todos os quadros são iniciados com "68" e depois o comprimento do telegrama. Por exemplo: cliente: 68 14 00 00 00 00 67 0106 00 01 00 00 00 00 1C 79 BA 0B AE 04 11 // ativação da sincronização de tempo. servidor: 68 14 00 00 00 00 67 0107 00 01 00 00 00 00 1C 79 BA 0B AE 04 11 // confirmação da sincronização de tempo, esta é a resposta esperada. Mas há situações em que o servidor responde a outro telegrama antes da confirmação da sincronização de tempo. Por exemplo, abaixo, está o telegrama em massa (do servidor):680E00000000460104000100000000806820020000001E02030001004A040001E50B810001010045040001060F81000101006828040000002402030001001100000000000000FE9A80000101001300000100DE4100FE9A800001010068BE06000000250C03000100C80000000000008050008100010100C90000000000008050008100010100CA0000000000008050008100010100CB0000000000008050008100010100CC0000000000008050008100010100CD0000000000008050008100010100C8000000000000814E008200010100C9000000000000814E008200010100CA000000000000814E008200010100CB000000000000814E008200010100CC000000000000814E008200010100CD00000000000081500082000101006814080000006701400001000000008E869217BF0C6368FA0A000000251003000100CA0000000000001950009A00010100CB0000000000001950009A00010100CC0000000000001950009A00010100CD0000000000001950009A00010100C80000000000001A4E009B00010100C90000000000001A4E009B00010100CA0000000000001A4E009B00010100CB0000000000001A4E009B00010100CC0000000000001A4E009B00010100CD0000000000001A51009B00010100C80000000000001B4E009C00010100C90000000000001B4E009C00010100CA0000000000001B4E009C00010100CB0000000000001B4E009C00010100CC0000000000001B4E009C00010100CD0000000000001B4E009C0001010068FA0C000000251003000100C80000000000001C4E009D00010100C90000000000001C4E009D00010100CA0000000000001C4E009D00010100CB0000000000001C4F009D00010100CC0000000000001C4F009D00010100CD0000000000001C4F009D00010100C80000000000001D4E009E00010100C90000000000001D4F009E00010100CA0000000000001D4F009E00010100CB0000000000001D4F009E00010100CC0000000000001D4F009E00010100CD0000000000001D4F009E00010100C80000000000001E4E009F00010100C90000000000001E4E009F00010100CA0000000000001E4E009F00010100CB0000000000001E4F009F0001010068FA0E000000251003000100CC0000000000001E4F009F00010100CD0000000000001E4F009F00010100C80000000000001F4E00A000010100C90000000000001F4E00A000010100CA0000000000001F4E00A000010100CB0000000000001F4E00A000010100CC0000000000001F4E00A000010100CD0000000000001F4E00A000010100C8000000000000004E00A100010100C9000000000000004E00A100010100CA000000000000004F00A100010100CB000000000000004F00A100010100CC000000000000004F00A100010100CD000000000000004F00A100010100C8000000000000015000A200010100C9000000000000015000A2000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ah ~ desculpe por tanto tempo ....

Existem oito "68", isto é, compreendem 8 quadros de telegrama. neste caso, eu tenho uma pergunta na coleta do telegrama do servidor. Como mencionei acima, não sei quantos quadros de telegrama e o comprimento de cada quadro, então defini o byte de matriz grande [2048] para conter todo o telegrama e o dividi em 11 strings (nova String [11]). Isso funciona na maioria das situações, mas obviamente não é bem projetado.

 byte[] boTimeSync = HexStrToByte.hexStringToBytes(Setting.TIMESYNC);
            out.write(boTimeSync);
            out.flush(); 
            VisibleFrame.updateTextArea(Setting.TIMESYNC.toUpperCase()+"\n");
            VisibleFrame.updateTextArea(TimeParsing.parsing(Setting.TIMESYNC.toUpperCase())+"\n");
            byte[] biTimeSync = new byte[2048];         
            bin.read(biTimeSync);
            str = t104.ByteToStr.byteToStr(biTimeSync);
            String[] bi = new String[11]; 
            bi = SplitTele.splitTele(str);

Então, como obter todos os quadros, já que o InputStream.available () não é adequado na programação de rede?

questionAnswers(1)

yourAnswerToTheQuestion