Я исправил, у меня были проблемы с тем, как я читал из сокета, с тем, как я преобразовываю 4 байта в тип данных Int, и с тем, как я трансформирую байты в String, я выясняю, почему я не получал все байты при попытке чтения из сокета, причина заключалась в том, что когда я вызываю метод client.read (), сервер был недостаточно быстр для отправки информации, поэтому он ничего не читал, поэтому я сделал al oop и с помощью метода client.available () я проверил, есть ли байт, готовый к чтению, поэтому l oop заканчивается, когда были прочитаны первые 4 байта. Затем я преобразовываю считанные 4 байта в Int, читаю остальные байты таким же образом, как раньше, и преобразовываю байты в String.
Вот мой функциональный код:
String recibirInfo(bool* error) {
String msj = "";
byte bytesSizeMsj[4];
for (int i = 0; i < sizeof(bytesSizeMsj); i++) {
if (client.connected()) {
if (client.available()) {
bytesSizeMsj[i] = client.read();
} else {
delay(10);
i--;
}
} else {
*error = true;
return "";
}
}
//TRANSFORMAR LOS 4 BYTES A INT
int sizeMsj = 0;
sizeMsj = ((int)bytesSizeMsj[3]) | sizeMsj;
sizeMsj = ((int)bytesSizeMsj[2]) << 8 | sizeMsj;
sizeMsj = ((int)bytesSizeMsj[1]) << 16 | sizeMsj;
sizeMsj = ((int)bytesSizeMsj[0]) << 24 | sizeMsj;
char charArray[sizeMsj];
//LEER EL TEXTO
for (int i = 0; i < sizeof(charArray); i++) {
if (client.connected()) {
if (client.available()) {
charArray[i] = client.read();
} else {
delay(250);
i--;
}
} else {
*error = true;
return "";
}
}
//TRANSFORMAR BYTES A STRING
msj = charArrayToString(charArray, sizeMsj);
Serial.print("RECIBIDO: ");
Serial.println(msj);
return msj;
}
String charArrayToString(char arrChar[], int tam) {
String s = "";
for (int i = 0; i < tam; i++) {
s = s + arrChar[i];
}
return s;
}