чтение значений udp сервера

stalerok me
Offline
Зарегистрирован: 08.04.2019
вопрос как проверять значения при udp пакете и прислать на него ответ
 
[code]
[== Undefined ==]
      udp.read(receivingBuffer, size);
      receivingBuffer[size]=0;
      if (receivingBuffer > 0) {
          Serial.print(receivingBuffer);
          if (receivingBuffer == "test") {
            Serial.printf("yra");
          }
[/code]
 
ответ прилитает в серийной порт как
 
test
 
каждой раз с новой строчки но проверить через if я могу в чем проблема?
bwn
Offline
Зарегистрирован: 25.08.2014

Рекомендую, для начала, ознакомиться с правилами форума.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вставьте код как положено и, заодно, изучите вот это.

stalerok me
Offline
Зарегистрирован: 08.04.2019
Приветствую!
 
в планах зделать чтение и сравнение команд плате по udp от клиента в меру своих возможностей зделал следующий код 
 
      udp.read(receivingBuffer, size);
      receivingBuffer[size]=0;
      if (receivingBuffer > 0) {
          Serial.print(receivingBuffer);
          if (receivingBuffer == "test") {
            Serial.printf("yra");
          }
 
но к сожилению он не работает
 
как я понял я непрявильно сравниваю значения. Как будет правильно?
 
оборудование: esp-32 с wifi на борту
опыт: студент не видавший кода
 
буду рад помощи и зарание спасибо
DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

stalerok me пишет:

 
как я понял я непрявильно сравниваю значения. Как будет правильно?
 

См. описание memcmp, strcmp. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

stalerok me пишет:

буду рад помощи 

Боюсь, не будете. Помощь Вам уже оказана. В посте #2 я Вам написал что Вам нужно прочитать. Вы прочитали? Нет. Ну, и чего Вы ждёте?

wdrakula
wdrakula аватар
Онлайн
Зарегистрирован: 15.03.2016

ТС, дорогой!

Знаком "==" строки даже на джаве не сравниваются, не то, что на С++... прочти букварь, потом "Буратино", потом КиР. Ну а там уж втянешься... возможно.

stalerok me
Offline
Зарегистрирован: 08.04.2019

спасибо всем уже починил

для тех кто будет гуглить ответ

if (receivingBuffer > 0) {
          Serial.print(receivingBuffer);
          if (memcmp(receivingBuffer,"test",3) == 0) {
            Serial.printf("yra");
            udp.beginPacket(udp.remoteIP(), udp.remotePort()); 
            udp.printf("test");
            udp.endPacket(); 
          }
        }

 

b707
Онлайн
Зарегистрирован: 26.05.2017

Сколько будет дважды два? - для тех кто будет гуглить, выкладываю ответ...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

stalerok me пишет:

спасибо всем уже починил

для тех кто будет гуглить ответ

if (receivingBuffer > 0) {
          Serial.print(receivingBuffer);
          if (memcmp(receivingBuffer,"test",3) == 0) {
            Serial.printf("yra");
            udp.beginPacket(udp.remoteIP(), udp.remotePort()); 
            udp.printf("test");
            udp.endPacket(); 
          }
        }

Простите, Вы здоровы? Тем, кто будед углить это нельзя показывать!

Что у Вас делает тройка в строке №3? Почемц тройка. С единицей тоже будет работать! И с двойкой будет! Почему там тройка? (Подсказка: тройка - неправильно).

Какой udp-сервер, прости Господи!

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ладно memcpy, а как вам первая строка?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ещё лучше. Описаний нет, потому я и не обратил внимания :)

В общем, однозначно, прибиваем гвоздями в качестве учебника для тех, кто будет гуглить - чего людям мучиться, если готовое решение уже есть?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

stalerok me пишет:

спасибо всем уже починил

для тех кто будет гуглить ответ

if (receivingBuffer > 0) {
          Serial.print(receivingBuffer);
          if (memcmp(receivingBuffer,"test",3) == 0) {
            Serial.printf("yra");
            udp.beginPacket(udp.remoteIP(), udp.remotePort()); 
            udp.printf("test");
            udp.endPacket(); 
          }
        }

 

Строка номер 1 - условие всегда истинно, потому что адрес буфера - ненулевой, следовательно, эта проверка не имеет ни малейшего смысла. Возможно, вы хотели проверить, что буфер не пустой - тогда это делается не так.

Строка номер 3 - вы сравниваете первых ТРИ байта двух блоков памяти, т.е. сравнение идет не на "test", как вы могли подумать, а на "tes". Для осознания сего чудного факта достаточно послать по UDP (или как вы там вгоняете символы в приёмный буфер) не "test", а, скажем, "tesZ" - проверка сработает.

Вывод: пока знаний и умений по С++ -маловато, надо хотя бы внимательно читать описания к библиотечным функциям, которые используете. Ну и учебник по С++ - изучить будет совершенно не лишним.