The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Помогите найти ошибку!!!"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Помогите найти ошибку!!!"
Сообщение от nnov Искать по авторуВ закладки(ok) on 14-Июл-04, 17:02  (MSK)
Решил сделать простой сервер времяни (в образовательных
целях), ошибок (по словам компилятора) куча  а я ничего
найти не могу.  Помогите пожалуйста. зараннее спасибо.

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <time.h>
#include <strings.h>
#define PORTNUM 13000
#define HOSTLEN 256

int main(int argc, char *argv[])
{
  struct sockaddr_in saddrr;
  struct hostent *hp;
  char hostname[HOSTLEN];
  int sock_id, sock_fd;
  FILE *sock_fp;
  char *ctime();

  time_t thetime;

  sock_id = socket(PF_INET, SOCK_STREAM, 0);
  if(sock_id == -1)
    {perror("socket"); exit(0);}

  bzero((void *)&saddr, sizeof(saddr));
  gethostname(hostname, HOSTLEN);
  hp = gethostbyname(hostname);
  bcopy((void *)hp ->h_addr, (void *)&saddr.sin_addr, hp -> H_length);
  saddr.sin.port =htons(PORTNUM);
  saddr.sin.family = AF_INET;
  if(bind(sock_id, (struct sockaddr *)&saddr,sizeof(saddr)) != 0)
    {perror("bind"); exit(0);}
  if(listen(sock_id, 1) != 0)
     {perror("listen"); exit(0);}
  while(1){
    sock_fd = accept(sock_id. NULL, NULL);
    printf("YES!!!\n");
    if(sock_fd == -1)
      {perror("accept"); exit(0);}
    sock_fd =fdopen(sock_fd, "w");
    if(sock_fd == NULL);
       {perror("fdopen"); exit(0);}
    thetime = time(NULL);
    fprintf(sock_fd, "Cur time is: ");
    fprintf(sock_fd, "%s", ctime(&thetime));
    fprintf(sock_fd, "End...");
    fclose(sock_fd);
}
  return 0;
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Помогите найти ошибку!!!"
Сообщение от dimus Искать по авторуВ закладки(ok) on 15-Июл-04, 12:50  (MSK)
#include <string.h>
int socket_descriptor; а не FILE
Не надо определять функцию ctime !!!! Она уже определена в time.h
См. man 3 ctime или сделай так:
time_t t;
struct tm* ts;
t = time( NULL );
// Не помню точно, но по-моему так
tm = localtime( &t );
Год: 1970 + t -> tm_year
Month: t -> tm_mon + 1
day: t -> tm_mday
Подробнее man 3 localtime
Я не уверен, что это все, но я бросил только беглый взгляд.
Главное - не сдаваться. Ошибки можно выловить. Почитай также про
отладчик gdb
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Помогите найти ошибку!!!"
Сообщение от foxru Искать по авторуВ закладки(ok) on 15-Июл-04, 19:08  (MSK)
>Решил сделать простой сервер времяни (в образовательных
>целях), ошибок (по словам компилятора) куча  а я ничего
>найти не могу.  Помогите пожалуйста. зараннее спасибо.

1) у тебя есть обявленние
struct sockaddr_in saddrr;
а далее по тексту ты используеш saddr

2) нужно подключить #include <netdb.h>

3)  в строке bcopy((void *)hp ->h_addr, (void *)&saddrr.sin_addr, hp -> H_length); ошибка там не H_length а h_length

4) Не saddrr.sin.port а saddrr.sin_port  и соответсветно не saddrr.sin.family а saddrr.sin_family

5) У тебя sock_fd = accept(sock_id. NULL, NULL) там вместо точки должна быть запятая sock_fd = accept(sock_id, NULL, NULL)

6) Начиная с строки sock_fd = fdopen(sock_fd, "w") везде переправить sock_fd на sock_fp

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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