Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2011, 09:21   #1
metoflex
Пользователь
 
Регистрация: 21.06.2009
Сообщений: 37
Восклицание Формирование данных на сервере и вывод в веб

Приветствую Уважаемые пользователи!

Мучаюсь второй день. Я на сервере формирую информацию (Сама цель - написание trace). И после формирования укидаю ее в веб-интерфейс.

Код формирования:

Код:
std::string somestring="", resultstr="";
int l=0;
resultstr="";
somestring="";

while (l<3)
             {
             switch(l){
          case 0:
              sprintf((char*)somestring.c_str(),"%2d:    %4d ms",ttl, time[0]);
              resultstr+=somestring;
          break;
          case 1:
              sprintf((char*)somestring.c_str()," %4d ms ", time[1]);
              resultstr+=somestring;
          break;
          case 2:
              sprintf((char*)somestring.c_str()," %4d ms     %i.%i.%i.%i<br><br>",
                                      time[2],rcvdIP[0],rcvdIP[1],rcvdIP[2],rcvdIP[3]);
              resultstr+=somestring;
          break;
          default:
          printf ("DEFAULT");
          }
         l++;
 }

    resultstr+="";
    strcpy(outBuf, resultstr.c_str());
    websWrite(wp, outBuf);
    my_socket.CloseSocket();
    websFooter(wp);
    websDone(wp, 200);
    resultstr="";
    return;

Сам trace проходит успешно, но вот инфу выводит следующую:

0 ms 192.168.15.254

br> br> br> br> br> br>


Пробовал использовать вместо while - for, пробывал также уходить от switch к if, думал мб в этом засада, но все тщетно.
Подскажите пожалуйста в чем моя ошибка или мб можно то, что я реализую через switch и string реализовать как-то иначе. Уже 8 часов за 2 дня потратил на исправление этого бага.

В свою очередь, если использовать код вида:

Код:
std::string somestring="", resultstr="";
resultstr="";
somestring="";

for(int i=0; i<=2; i++)
         {

         switch (i)
         {
         case 0:
         {

                 sprintf((char*)somestring.c_str(),"%2d:    %4d ms",ttl, time[i]);
resultstr+=somestring;

         }break;
         case 1:
         {

                 sprintf((char*)somestring.c_str()," %4d ms ", time[i]);

         }break;
          case 2:
          {

                  sprintf((char*)somestring.c_str()," %4d ms     %i.%i.%i.%i<br><br>",
                          time[i],rcvdIP[0],rcvdIP[1],rcvdIP[2],rcvdIP[3]);


                  resultstr+=somestring;

              printf("\n%s\n",resultstr);
          }break;
         };
         }

    resultstr+="";
    strcpy(outBuf, resultstr.c_str());
    websWrite(wp, outBuf);
    my_socket.CloseSocket();
    websFooter(wp);
    websDone(wp, 200);
    resultstr="";
    return;
Вывод получаю в вебе следующий:

1 ms 192.168.15.254

0 ms 192.168.25.254

1 ms 195.151.213.90

3 ms 193.232.246.118

3 ms 193.232.246.118

3 ms 81.19.64.76

4 ms 81.19.64.189

3 ms 81.19.70.3


т.е. такое ощущение, как будто проге абсолютно наплевать на то, что я творю в case 1 и case 2.



Спасибо Огромное!
metoflex вне форума Ответить с цитированием
Старый 07.07.2011, 09:59   #2
metoflex
Пользователь
 
Регистрация: 21.06.2009
Сообщений: 37
По умолчанию

Засада какя-то в работе со string'ами. Это точно.
metoflex вне форума Ответить с цитированием
Старый 07.07.2011, 10:26   #3
metoflex
Пользователь
 
Регистрация: 21.06.2009
Сообщений: 37
По умолчанию

Решение нашел:

Код:
for(int i=0; i<=2; i++)
	 {
		 switch (i)
		 {
		 case 0:
		 {
			 sprintf(outBuf,"%d: 	%d ms",ttl, time[i]);
			 websWrite(wp, outBuf);
		 }break;
		 case 1:
		 {
			 sprintf(outBuf," 	%d ms", time[i]);
			 websWrite(wp, outBuf);

		 }break;
		 case 2:
		 {
			 sprintf(outBuf," %d ms %i.%i.%i.%i<br>",
			  time[2],rcvdIP[0],rcvdIP[1],rcvdIP[2],rcvdIP[3]);
			 websWrite(wp, outBuf);
			 free(outBuf);
		 }break;
		 };
	 }
Но не красивое, если кто-то сможет подсказать, что-то более иили менее адекватное, чем я сваял, буду весьма благодарен.

Последний раз редактировалось metoflex; 07.07.2011 в 10:31.
metoflex вне форума Ответить с цитированием
Старый 07.07.2011, 20:59   #4
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от metoflex Посмотреть сообщение
Приветствую Уважаемые пользователи!

Мучаюсь второй день. Я на сервере формирую информацию (Сама цель - написание trace). И после формирования укидаю ее в веб-интерфейс.

Код формирования:

Код:
std::string somestring="", resultstr="";
int l=0;
resultstr="";
somestring="";

while (l<3)
             {
             switch(l){
          case 0:
              sprintf((char*)somestring.c_str(),"%2d:    %4d ms",ttl, time[0]);
              resultstr+=somestring;
          break;
          case 1:
              sprintf((char*)somestring.c_str()," %4d ms ", time[1]);
              resultstr+=somestring;
          break;
          case 2:
              sprintf((char*)somestring.c_str()," %4d ms     %i.%i.%i.%i<br><br>",
                                      time[2],rcvdIP[0],rcvdIP[1],rcvdIP[2],rcvdIP[3]);
              resultstr+=somestring;
          break;
          default:
          printf ("DEFAULT");
          }
         l++;
 }

    resultstr+="";
    strcpy(outBuf, resultstr.c_str());
    websWrite(wp, outBuf);
    my_socket.CloseSocket();
    websFooter(wp);
    websDone(wp, 200);
    resultstr="";
    return;

Сам trace проходит успешно, но вот инфу выводит следующую:

0 ms 192.168.15.254

br> br> br> br> br> br>


Пробовал использовать вместо while - for, пробывал также уходить от switch к if, думал мб в этом засада, но все тщетно.
Подскажите пожалуйста в чем моя ошибка или мб можно то, что я реализую через switch и string реализовать как-то иначе. Уже 8 часов за 2 дня потратил на исправление этого бага.

В свою очередь, если использовать код вида:

Код:
std::string somestring="", resultstr="";
resultstr="";
somestring="";

for(int i=0; i<=2; i++)
         {

         switch (i)
         {
         case 0:
         {

                 sprintf((char*)somestring.c_str(),"%2d:    %4d ms",ttl, time[i]);
resultstr+=somestring;

         }break;
         case 1:
         {

                 sprintf((char*)somestring.c_str()," %4d ms ", time[i]);

         }break;
          case 2:
          {

                  sprintf((char*)somestring.c_str()," %4d ms     %i.%i.%i.%i<br><br>",
                          time[i],rcvdIP[0],rcvdIP[1],rcvdIP[2],rcvdIP[3]);


                  resultstr+=somestring;

              printf("\n%s\n",resultstr);
          }break;
         };
         }

    resultstr+="";
    strcpy(outBuf, resultstr.c_str());
    websWrite(wp, outBuf);
    my_socket.CloseSocket();
    websFooter(wp);
    websDone(wp, 200);
    resultstr="";
    return;
Вывод получаю в вебе следующий:

1 ms 192.168.15.254

0 ms 192.168.25.254

1 ms 195.151.213.90

3 ms 193.232.246.118

3 ms 193.232.246.118

3 ms 81.19.64.76

4 ms 81.19.64.189

3 ms 81.19.70.3


т.е. такое ощущение, как будто проге абсолютно наплевать на то, что я творю в case 1 и case 2.



Спасибо Огромное!
У вас совершенно неправильный код! Нельзя менять с.str(). Недаром значение этой функции указатель на константу. Когда вы меняете, класс string об этом ничего не знает! То есть его поля длины строки, а также сам буфер под строку останутся прежними. Более того вы таким образом можете получить выход за границу памяти!
То есть ваш пример - это пример того, как нельзя делать!
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объемная база данных на сервере Haheedens Фриланс 1 02.05.2011 16:48
Формирование и вывод новой матрицы DarkSwan Visual C++ 10 05.11.2010 17:03
Формирование SQL-запроса и вывод в DBGridEh sezam БД в Delphi 1 16.09.2009 11:23
Удаленный вызов скрипта на веб сервере Garacio_cain Работа с сетью в Delphi 1 09.03.2009 22:39