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" (байт)
заменить на
и повторить прогон.
заменить на
и повторить прогон.
за "1" еще какой-то байты приходит Req: 0xD Req: 0xA
а как можно от этого избавиться?
а как можно от этого избавиться?
Это вопрос не к ардуине (она всё честно делает), а к "SocketTest v3".
Ну, и всегда можно игнорировать эти символы, либо взять пример Ethernet -> WebServer, там нарисовано, как правильно обрабатывать запросы c CRLF (\r\n).
Это вопрос не к ардуине (она всё честно делает), а к "SocketTest v3".
Ну, и всегда можно игнорировать эти символы, либо взять пример Ethernet -> WebServer, там нарисовано, как правильно обрабатывать запросы c CRLF (\r\n).
спасибо за совет. Решил проблему. В делфи создал сокет ПО там все ништяк
спасибо за совет. Решил проблему. В делфи создал сокет ПО там все ништяк
не решили, а только отвернулись от проблемы.
У вас код сервера с принципиальной ошибкой - он каждый приходящий символ обрабатывает как новый запрос. То есть этот код будет правильно работать только если длина запроса 1 байт. А это, прямо скажем, не слишком удобно
не решили, а только отвернулись от проблемы.
У вас код сервера с принципиальной ошибкой - он каждый приходящий символ обрабатывает как новый запрос. То есть этот код будет правильно работать только если длина запроса 1 байт. А это, прямо скажем, не слишком удобно
есть другой вариант? можно ссылку или файл
есть другой вариант?
конечно есть - не подхватываться обрабатывать каждый полученный символ, а сначала собрать их в строку и дождаться конца запроса