The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Программирование Sockets.Проблема с буффером., !*! Gor, 18-Янв-07, 12:12  [смотреть все]
Всем привет,
я пытаюсь написать программу Server-Client программу посредством TCP/IP(Socket).

Задача для Server-программы - запросить актуальное время у системы в формате часов,минут,секунд,милли- и микросекунд и отослать его Client.
Там оно просто должно быть выведено на екран или сохранено.

Проблема:
Получаемые Strings содержат ошибки.
Как например:
3.578    10:26:31.336680
3.579    10:26:31.336686
9    10:23.580    10:26:31.336693
3.581    10:26:31.337516
3.582    10:26:31.337525
(первые цифры - нумерация)

с чем это может быть связано?

Спасибо

  • Программирование Sockets.Проблема с буффером., !*! BigHo, 12:15 , 18-Янв-07 (1)
    • Программирование Sockets.Проблема с буффером., !*! Gor, 12:46 , 18-Янв-07 (2)
      >как насчет куска кода для сервера и клиента ?


      да,конечно.
      Ниже привожу фрагмент Server-программы.
      Н ругайте только сильно мои программёрские навыки;) ,-я занимаюсь программированием всего три месяца.
      некоторые части кода я скопировал из других программ,до конца не понимая, как они работают.:(


      while (1)
      {
      static char buffer[256];
      int a,i;
      struct timeval tv;
      struct tm *actual_time;
      char vorbuffer[10];

         for(a=1;a<=10;a++)
              {
            for(i=1; i<=1000;i++)
              {    gettimeofday( &tv, 0 );
              actual_time = localtime( &(tv.tv_sec ) );
              strftime(vorbuffer,10, "%H:%M:%S", localtime( &(tv.tv_sec ) ) );

              sprintf(buffer,"%d.%d\t%s.ld\n",a,i,vorbuffer, tv.tv_usec);
              length = strlen(buffer);
              send(client_fd, buffer, length, 0);
                     }
          sleep(1);
          }
      return 0;
      }


    • Программирование Sockets.Проблема с буффером., !*! Gor, 12:50 , 18-Янв-07 (3)
      >как насчет куска кода для сервера и клиента ?


      A eto Client:

      while (1)
        {
          length = recv(sock_fd, buffer, 256, 0);
                 if (length == 0)
            { printf("Connection closed by remote host.\n");
              break;
             }

           printf("%s",buffer);
         }

      • Программирование Sockets.Проблема с буффером., !*! NuINu, 13:22 , 18-Янв-07 (4)
        • Программирование Sockets.Проблема с буффером., !*! Gor, 13:29 , 18-Янв-07 (5)
          >А в чем ошибки то?


          3.578    10:26:31.336680
          3.579    10:26:31.336686
          9    10:23.580    10:26:31.336693 - эта строка не соответствует стандарту.
          3.581    10:26:31.337516
          3.582    10:26:31.337525

          Кроме того, в конце каждого внутреннего цикла и переходе на следующий происходит следующее смещение:

          2.998    10:26:30.331470
          2.999    10:26:30.331477
          2.1000    10:26:30.331483
          0    10:26:30.333.1    10:26:31.332734
          3.2    10:26:31.332789
          3.3    10:26:31.332798

          • Программирование Sockets.Проблема с буффером., !*! NuINu, 13:46 , 18-Янв-07 (6)
            • Программирование Sockets.Проблема с буффером., !*! Gor, 16:09 , 18-Янв-07 (8)
              >>
              >добавляй после каждого приема в буфер
              >buf[bytes_read] = '\0';
              >Возможно поможет. ;-))

              я не знаю, как мне это добавить правильно.
              Подробной документации нигде не нашёл.
              если не сложно,-поподробнее опишите.


              >Вообще то не плохо выяснить, в какой посылке приходят неверные строки, совет:
              >выведи все что посылаешь на терминале сервера, разделяя каждую посылку спец
              >строками: |--------------|
              >и тоже сделай у клиента.
              >Потом можешь написать сюда еще разик, с результатом.


              Интересная идея!
              Ниже результат добавления "спец.строк" и измененный код.
              полный хаус...

              1.1    13:50:40.138692
              ------------------
              +++++++++++
              1.2    13:5------------------
              0:40.138832
              ++++++++------------------
              +++
              1.3    13:50:40.138------------------
              842
              +++++++++++
              1.4    ------------------
              13:50:40.138850
              ++++------------------
              +++++++
              1.5    13:50:40------------------
              .138857
              +++++++++++
              ------------------

              Client:

                while (1)
                     {
                              
                        length = recv(sock_fd, buffer, 20, 0);
                             if (length == 0) {
                          printf("Connection closed by remote host.\n");
                          break;
                              }

                      printf("%s",buffer);
                      printf("------------------\n");
                     }
                
                close(sock_fd);
                return(0);
              }


              Server:

                while (1)
                 {
                  int a,i;
                  struct timeval tv;
                  struct tm *actual_time;
                  char vorbuffer[9];

                  for(a=1;a<=10;a++){
                  
                      for(i=1; i<100;i++){

                      gettimeofday( &tv, 0 );
                      actual_time = localtime( &(tv.tv_sec ) );
                      strftime(vorbuffer,9, "%H:%M:%S", localtime( &(tv.tv_sec ) ) );
                      
                      sprintf(buffer,"%d.%d\t%s.ld\n",a,i,vorbuffer, tv.tv_usec);
                      length = strlen(buffer);
                      send(client_fd, buffer, length, 0);
                      
                      sprintf(buffer,"+++++++++++\n");
                      length = strlen(buffer);
                      send(client_fd,buffer,length,0);

                              }
                      
                  sleep(1);
                  
                   }
                  return 0;

                  }




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру