У меня есть микроконтроллер Arduino с Sparkfun WiFly Shield .
Я создаю простую программу на C # /. NET, которая подключается к Arduino с помощью System.Net.Sockets
:
Socket Soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public void SendMsg(string msg)
{
try
{
byte[] buffer = StrToByteArray(msg);
if (Soc.Connected)
Soc.Send(buffer);
else
{
Soc.Connect(this.remoteIP);
Soc.Send(buffer);
}
}
catch (Exception e){}
}
На Arduino у меня есть:
while(SpiSerial.available() > 0) {
byte b = SpiSerial.read();
Serial.println(b);
}
Когда соединение через сокет выполняет рукопожатие, я получаю: "* OPEN *" и когда закрыто, я получаю: "* CLOS * ".
Проблема в том, что я получаю сообщения один байт за другим, и иногда я не получаю полное сообщение в одной while
петле.
Так что, если я использую код, который я показал выше на Arduino, мой последовательный терминал выглядит следующим образом:
*
O
P
E
N
*
T
E
S
T
*
C
L
O
S
*
Так, как я могу выяснить сообщение, которое пытается отправить ПК?
Я знаю, что мне нужно как-то использовать специальный байт, который будет символизировать конец моего сообщения.(Специальный байт, который я не буду использовать в своем сообщении, только для обозначения конца сообщения)
Но как я могу это сделать?И какой байт использовать?