Arduino TCP Server
- Войдите на сайт для отправки комментариев
Втр, 03/12/2019 - 18:05
Добрый день, Есть tcp сервер на arduino клиент подключается делает запрос, сервер отвечает, но отправляет ответ 3 раза. В чем может быть проблема?
EthernetClient client = server.available();
if (client) {
if (!alreadyConnected) {
client.flush();
Serial.println("We have a new client");
alreadyConnected = true;
}
if (client.available() > 0) {
char thisChar = client.read();
//server.write("hello");
Serial.write(thisChar);
sensors.requestTemperatures();
delay(10);
Serial.print("T0=");
Serial.println(sensors.getTempCByIndex(0));
server.print(sensors.getTempCByIndex(0));
}
}
Запрос типа "d<CR><LF>"?
Запрос типа "d<CR><LF>"?
как? не понял?, в роле клиента у меня SocketTest v3, а сервер ардуино
Так разберитесь какой запрос приходит, посчитайте в нём количество байт.
Так разберитесь какой запрос приходит, посчитайте в нём количество байт.
клиент отправляет "1" (байт)
заменить на
Serial.print("Req: 0x"); Serial.println((byte)thisChar, HEX);и повторить прогон.
заменить на
Serial.print("Req: 0x"); Serial.println((byte)thisChar, HEX);и повторить прогон.
за "1" еще какой-то байты приходит Req: 0xD Req: 0xA
а как можно от этого избавиться?
а как можно от этого избавиться?
Это вопрос не к ардуине (она всё честно делает), а к "SocketTest v3".
Ну, и всегда можно игнорировать эти символы, либо взять пример Ethernet -> WebServer, там нарисовано, как правильно обрабатывать запросы c CRLF (\r\n).
Это вопрос не к ардуине (она всё честно делает), а к "SocketTest v3".
Ну, и всегда можно игнорировать эти символы, либо взять пример Ethernet -> WebServer, там нарисовано, как правильно обрабатывать запросы c CRLF (\r\n).
спасибо за совет. Решил проблему. В делфи создал сокет ПО там все ништяк
спасибо за совет. Решил проблему. В делфи создал сокет ПО там все ништяк
не решили, а только отвернулись от проблемы.
У вас код сервера с принципиальной ошибкой - он каждый приходящий символ обрабатывает как новый запрос. То есть этот код будет правильно работать только если длина запроса 1 байт. А это, прямо скажем, не слишком удобно
не решили, а только отвернулись от проблемы.
У вас код сервера с принципиальной ошибкой - он каждый приходящий символ обрабатывает как новый запрос. То есть этот код будет правильно работать только если длина запроса 1 байт. А это, прямо скажем, не слишком удобно
есть другой вариант? можно ссылку или файл
есть другой вариант?
конечно есть - не подхватываться обрабатывать каждый полученный символ, а сначала собрать их в строку и дождаться конца запроса