URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2712
[ Назад ]

Исходное сообщение
"сокет - Сервер не слышит клиента"

Отправлено dek , 24-Мрт-04 17:35 
Приветствую всех!
Вроде все делал по доке, но клиент с сервером не соединяется. Пишу на С под FreeBSD.
Вот программа-сервер:
main (int argc, char *argv[]) {
  int servAddrLen;
  char host_addr[16];
  char msg[100], comm[100], buff[8192];
  struct sockaddr_in serv_addr;

      bzero(&serv_addr, sizeof(serv_addr));

      serv_addr.sin_family          = AF_INET;
      serv_addr.sin_addr.s_addr     = INADDR_LOOPBACK;
      serv_addr.sin_port            = htons (tcp_port);

      if((sockfd=socket(AF_INET, SOCK_STREAM, 0))<0)
        print_error();
      else  {
        #ifdef DEBUG
            fprintf(stderr, "Сокет создан\n");
        #endif
      }

      servAddrLen=sizeof(serv_addr);
      bind (sockfd, (struct sockaddr *) &serv_addr, sizeof(servAddrLen));
      if (listen (sockfd, 10)<0) {
         fprintf(stderr, "Error listen\n");
         exit(-1);
      }
      while ((accSock=accept(sockfd, (struct sockaddr *) &serv_addr, &(servAddrLen)))) {
        if (accSock > 0) write (accSock, "Call received", 20);
      }
}

А вот клиент:
main (int argc, char *argv[]) {
  char host_addr[16];
  char msg[100], comm[100], buff[8192], data;
  struct sockaddr_in serv_addr;
  int i;

      sprintf(host_addr, "127.0.0.1");
      bzero(&serv_addr, sizeof(serv_addr));

      serv_addr.sin_family          = AF_INET;
      serv_addr.sin_addr.s_addr     = inet_addr (host_addr);
      serv_addr.sin_port            = htons (tcp_port);

      if((sockfd=socket(AF_INET, SOCK_STREAM, 0))<0)
            print_error();
      else  {
            #ifdef DEBUG
                    fprintf(stderr, "Сокет создан\n");
            #endif
      }

      if(connect(sockfd, (struct sockaddr *)  &serv_addr, sizeof(serv_addr)) < 0) {
            print_error();
            close(sockfd);
      }
      else {
            #ifdef DEBUG
                    fprintf(stderr, "Связь с сервером создана\n");
            #endif
      }
      while (1) {
        if ((i=recv(sockfd, &buff, 20, 0))<0) {
            fprintf(stderr, "Error recv\n");
            exit(0);
        }
        buff[i]='\0';
        printf ("Получено: %s\n", buff);
      }
}


Буду благодарен тому кто подскажет в чем проблема.


Содержание

Сообщения в этом обсуждении
"сокет - Сервер не слышит клиента"
Отправлено black_pokemon , 25-Мрт-04 01:50 
>>      serv_addr.sin_family      
>    = AF_INET;
>      serv_addr.sin_addr.s_addr     =
>INADDR_LOOPBACK;
>      serv_addr.sin_port      
>      = htons (tcp_port);
>

че за tcp_port ???


"сокет - Сервер не слышит клиента"
Отправлено dek , 25-Мрт-04 11:28 
>>>      serv_addr.sin_family      
>>    = AF_INET;
>>      serv_addr.sin_addr.s_addr     =
>>INADDR_LOOPBACK;
>>      serv_addr.sin_port      
>>      = htons (tcp_port);
>>
>
>че за tcp_port ???

Да, забыл - там в обоих программах перед main () - #define tcp_port 1700


"сокет - Сервер не слышит клиента"
Отправлено dek , 25-Мрт-04 14:48 
>>>>      serv_addr.sin_family      
>>>    = AF_INET;
>>>      serv_addr.sin_addr.s_addr     =
>>>INADDR_LOOPBACK;
>>>      serv_addr.sin_port      
>>>      = htons (tcp_port);
>>>
>>
>>че за tcp_port ???
>
>Да, забыл - там в обоих программах перед main () - #define
>tcp_port 1700

И еще вопрос - тип сокета (блокирующий или неблокирующий) у клиента и сервера должен совпадать?


"сокет - Сервер не слышит клиента"
Отправлено Macovey , 25-Мрт-04 15:23 
Мож ipfw мешает :))))
и такое бывало....

"сокет - Сервер не слышит клиента"
Отправлено gt , 25-Мрт-04 16:13 
>>>>>      serv_addr.sin_family      
>>>>    = AF_INET;
>>>>      serv_addr.sin_addr.s_addr     =
>>>>INADDR_LOOPBACK;
>>>>      serv_addr.sin_port      
>>>>      = htons (tcp_port);
>>>>
>>>
>>>че за tcp_port ???
>>
>>Да, забыл - там в обоих программах перед main () - #define
>>tcp_port 1700
>
>И еще вопрос - тип сокета (блокирующий или неблокирующий) у клиента и
>сервера должен совпадать?

нет, не должен


"сокет - Сервер не слышит клиента"
Отправлено black_pokemon , 25-Мрт-04 17:48 
воопщем откомпилировалю клиент соединяется через 1 минуту после запуска :) никогда такого не видел... а так sockstat выдает что сервер слушает совсем не на том порте что указаню и телнет на этот порт выдает вполне ожидаемый результат (в нашем случае Call received) .. вообщем ни хрена не понятна.... говорила мама на адвоката иди учись... эээх...

"сокет - Сервер не слышит клиента"
Отправлено dek , 26-Мрт-04 10:58 
>воопщем откомпилировалю клиент соединяется через 1 минуту после запуска :) никогда такого
>не видел... а так sockstat выдает что сервер слушает совсем не
>на том порте что указаню и телнет на этот порт выдает
>вполне ожидаемый результат (в нашем случае Call received) .. вообщем ни
>хрена не понятна.... говорила мама на адвоката иди учись... эээх...

А прикол-то в том, что ошибка в bind - должно быть
bind (sockfd, (struct sockaddr *) &serv_addr, sizeof(struct sockaddr));

Большое спасибо, black_pokemon, не знал про sockstat - полезная штука