Отговори на тема  [ 8 мнения ] 
TCPIP програма връща допълнителна информация?! 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение TCPIP програма връща допълнителна информация?!
Здравейте! Имам контролер (18F66J60), на който съм заредил пример ex13b.c от TCPIP стака. Ето функцията, която изпраща информация:
Код:
int8 TCPConnectedTask(TCP_SOCKET socket, int8 which) {
   char c;
   static int8 counter[NUM_LISTEN_SOCKETS];
   static int8 button1_held[NUM_LISTEN_SOCKETS];
   char str[20];
   int8 i=0;

   if (TCPIsGetReady(socket)) {
      while (TCPGet(socket, &c)) {
         lcd_str[which][i++]=c;
         if (i>=20) {i=19;}
         lcd_str[which][i]=0;
      }
   }

//when button 1 is pressed: send message over TCP
//when button 2 is pressed: disconnect socket
   if (BUTTON1_PRESSED() && !button1_held[which] && TCPIsPutReady(socket)) {
      button1_held[which]=TRUE;
      sprintf(str,"BUTTON C=%U",counter[which]++);
      TCPPutArray(socket,str,strlen(str));
      TCPFlush(socket);
   }
   if (!BUTTON1_PRESSED()) {
      button1_held[which]=FALSE;
   }
  #if defined(BUTTON2_PRESSED())
   if (BUTTON2_PRESSED()) {
      return(TRUE);
   }
  #endif
   return(FALSE);
}

Когато се свържа към контролера през Телнет, си ми връща BUTTON C=0 и след това 10тина реда символи(глупости).
Преправих програмата като зададох статичен текст, който да връща:
Код:
int8 TCPConnectedTask(TCP_SOCKET socket) {
   char c;
   static int8 counter;
   char str[13]="Hello server";
   static int8 button1_held;

   if (TCPIsGetReady(socket)) {
      while (TCPGet(socket, &c)) {
      }
   }

   if (TCPIsPutReady(socket)) {
      TCPPutArray(socket,str,strlen(str));
      TCPFlush(socket);
   }
   return(TRUE);
}

и отново имам Hello server и после пак 10тина реда глупости и disconnect.
Някаква идея от къде идват тези допълнителните работи? Никъде другаде в програмата не се изпращат данни!
Благодаря!

_________________
www.elkran.com


Пет Мар 15, 2013 2:16 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Юни 05, 2006 1:48 pm
Мнения: 4906
Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
Мнение Re: TCPIP програма връща допълнителна информация?!
нулирай си стринговете, или по-точно почвай да пишеш от позиция "0".
това е най-често срещаното "нещо ми праща допълнителни символи без да ги пращам" :)

_________________
... ако трети ден не ти се работи... това означава, че е сряда !


Пет Мар 15, 2013 2:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: TCPIP програма връща допълнителна информация?!
Не те разбрах! Стрингът ми не се променя в хода на програмата:
Код:
char str[13]="Hello server";

Пробвах различни комбинации, както и глобална константа:
Код:
char str[13]="Hello server/r/n";

и т. нат.
Погледни в прикачения файл какво получавам на компа...


Прикачени файлове:
for mcu.jpg
for mcu.jpg [ 92.62 KiB | Прегледано 1644 пъти ]

_________________
www.elkran.com
Пет Мар 15, 2013 3:09 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Пон Фев 20, 2012 5:05 pm
Мнения: 51
Мнение Re: TCPIP програма връща допълнителна информация?!
Пробвай с TCPPutArray( socket,str, sizeof str ); вместо strlen. Иначе игнорираш последния нулев байт.

PS: Написаното "/r/n" надявам се е грешка в бързането, а не дълбоко убеждение.


Чет Мар 21, 2013 11:57 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение Re: TCPIP програма връща допълнителна информация?!
Като начало, махни strlen и забий директно 12 на негово място.


Чет Мар 21, 2013 4:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Re: TCPIP програма връща допълнителна информация?!
Нямаш терминация на стирнг-а (последния възможен символ да е \0) затова поинтъра отива да цикли из остатъка от програмата ти и праща "глупости"
Код:
char str[]="Hello server\r\n\0";


Чет Мар 21, 2013 4:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: TCPIP програма връща допълнителна информация?!
Благодаря за отговорите! Вече пробвах тези варианти, които казвате, но оказа се, че проблемът не е в мен. От разработчика на стака получих по-нова версия, в която са коригирали проблема!

_________________
www.elkran.com


Чет Мар 21, 2013 7:06 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение Re: TCPIP програма връща допълнителна информация?!
Не е задължително да се слага терминатор, даже е вредно, щото компилатора си го слага сам.
Нормалните компилатори, де. :)


Чет Мар 21, 2013 7:07 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни