Of course there are several ways to do this, I tried to make a didactic code for you to understand the logic, I hope to help:
//Exemplo da mensagem recebida
string mensagem = "STXMEnsagem1ETXSTXMEnsagem2ETXSTXMEnsagem3ETXSTXMEnsagem4ETXSTXMEnsagem5ETXSTXMEnsagem6ETX";
//Lista para armazenar as mensagens
List<string> mensagens = new List<string>();
while (mensagem.Length > 0)
{
//Encontra o próximo STX
int i1 = mensagem.IndexOf("STX");
//Encontra o próximo ETX a partir do STX anterior
int i2 = mensagem.IndexOf("ETX",i1);
//Pega a SubString
string sub = mensagem.Substring(i1+3,i2-3);
//Retira a parte já processada da mensagem
mensagem = mensagem.Remove(0, sub.Length+6);
//Adiciona a mensagem à lista de mensagens
mensagens.Add(sub);
}
//Quantidade de mensagens recebidas
int count = mensagens.Count;
//Imprime as mensagens na tela
foreach (string s in mensagens)
Console.WriteLine(s);
ps. I did not make any error handling.
I think that STX and ETX should be just a char, thus avoiding the +3, -3, +6, etc. calculations.