web server дополнительная страница.

Тема в разделе "Arduino & Shields", создана пользователем Dima85, 21 авг 2014.

  1. Dima85

    Dima85 Нерд

    Если в браузере написать localhost:83
    Выводится httpResponseHome.
    Необходимо если человек напишет localhost:83/home
    Вывести httpResponseFix. Подскажите пожалуйста как это сделать.

    Код (Text):

    void httpResponseHome(EthernetClient c) {
    c.println("HTTP/1.1 200 OK");
    c.println("Content-Type: text/html");
    c.println("Connnection: close");
    c.println();
    c.println(F(" <h1>HOME</h1> "));
    }
    void httpResponseFix(EthernetClient c) {
    c.println("HTTP/1.1 200 OK");
    c.println("Content-Type: text/html");
    c.println("Connnection: close");
    c.println();
    c.println(F(" <h1>FIX</h1> "));
    }
    void httpResponseRedirect(EthernetClient c) {
      c.println("HTTP/1.1 301 Found");
      c.println("Location: /");
      c.println();
    }

    ***********************************

          if (client.available()) {
            char c = client.read();
            if ((c == '\n') || (c == ' ' && nCommandPos>-1)) {
              sReturnCommand[nCommandPos] = '\0';
              if (strcmp(sReturnCommand, "\0") == 0) {
                httpResponseHome(client);
              } else {
                processCommand(sReturnCommand);
                httpResponseRedirect(client);
              }
              break;
            }
           

    // Пробую вставить сюда этот код, он компилируется но написав localhost:83/home я не вижу httpResponseFix вместо этого загружается httpResponseRedirect и идет переход на httpResponseHome.
    // Что я не так делаю куда нужно вставить этот код?
    if (c == 'home') {
    httpResponseFix(client);
    }

           
            if (nCommandPos>-1) {
              sReturnCommand[nCommandPos++] = c;
            }
            if (c == '?' && nCommandPos == -1) {
              nCommandPos = 0;
            }
          }
     
    Последнее редактирование: 21 авг 2014
  2. NR55RU

    NR55RU Гик

    Код (Text):
    if (c == 'home')
    Я вам в очередной раз НАСТОЯТЕЛЬНО рекомендую разобраться с тем что такое строки в Си и желательно еще и сам Си поучить, в противном случае подобные темы вы будите создавать тут с завидной регулярностью.
    Очень хорошая книга для начинающих.
     
  3. Dima85

    Dima85 Нерд

    Мне не хотелось бы терять время на изучение.
    В данном конкретном случае мне необходимо завершить маленький проект на arduino. Который будит делать необходимые мне задачи. В дальнейшем подключить и забросить железку далеко на шкаф, которая там будит работать. И не возвращаться больше к этому. У меня нет в планах быть разработчиком или же матерым программистам под arduino. Обещаю, возможно в будущем задам еще 1-2 вопроса и на этом все. :)
     
  4. Unixon

    Unixon Оракул Модератор

    Вы правда думаете, что избегая изучения нужного прямо здесь и сейчас вы его теряете меньше? Отнюдь. К тому же, при изучении чего-либо невозможно потерять время, можно только обменять его на знания.
     
  5. NR55RU

    NR55RU Гик

    Я бы мог кое что сказать по поводу вашего ответа, но Unixon все сказал коротко и идеально верно.
    Вам нужна не удочка а рыба, что же будь по вашему.

    Дело в том что в Си не существует срок вовсе, их просто нет в том понимании в котором вы к ним привыкли в PHP. В Си есть лишь массив символов, в каждой ячейке один символ, и есть такое соглашение что конец "строки" определяется NULL байтом.

    Любая функция при работе со "строкой" работает последовательно с каждой ячейкой такого массива и определяет конец "строки" по этому нулевому байту, либо ей четко передается размер в виде количества байтов (ячеек).
    В вашем коде в переменную типа char которая как раз может содержать только ОДИН символ, вы считываете тот самый один символ, в итоге и сравнивать его вы можете только с одним символом.

    Одинарные кавычки в Си обрамляют лишь ОДИН символ, в вашем выражении c == 'home' нет смысла, компилятор конечно пропустил это, но в зависимости от компилятора он скорее всего сравнит вашу переменную просто с последнем символом и это выражение будет эквивалентно c == 'e' , но тут будет от компилятора зависеть (по крайней мере мой компилятор сделал именно так).

    Сейчас я вас дико опечалю, выражение var == "home" тоже работать не будет ... почему не спрашивайте, просто примите на веру. :) Хотя двойными кавычками обрамляются "строки". И такое выражение char text[] = "Hello word" будет компилятором любезно преобразовано в "строку" о которой я писал выше.

    Что вам в итоге нужно.
    Считать все символы в массив а потом использовать функции сравнения строк, либо подружится с классом String языка C++, вот он делает работу со строками нечто смахивающим на то к чему вы привыкли в PHP, и вот там конструкция string1 == string2 будет работать так как там перегружен оператор "==" но при условии что обе переменные это объекты этого класса.

    Вот тут есть описания стандартный функций работы со "строками" в С. а тут есть описание класса String.
     
    Последнее редактирование: 21 авг 2014
    Михаил Тищенко и altex нравится это.