Форум русскоязычного сообщества Ubuntu


Автор Тема: Разработки сетевых приложений  (Прочитано 898 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Viktor_E

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Такая вот проблема. Надо написать программу-сервер. Самостоятельно написать не получилось, решил обратиться к книжке. С книжки выписал исходный код:
#include<sys/types.h>
#include<netdb.h>
#include<memory.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdio.h>

#include <unistd.h>
#include <strings.h>
#include <errno.h>
#include <arpa/inet.h>
#include <string.h>

#define SERVER_PORT 7777
#define BUF_SIZE 64
#define MSG_TO_SEND "What is your name?\n"

int main ()
{
    int sock1, sock2;
   
    int ans_len=0, total=0;
   
    char buffer[BUF_SIZE];
    struct sockaddr_in sin, client;
    memset ((char *)&sin, '\0', sizeof(sin));
   
    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = htonl (INADDR_ANY);
    sin.sin_port = SERVER_PORT;
   
    bind (sock1, (struct sockaddr *)&sin, sizeof(sin));
   
    printf("Server running...\n");
   
    listen (sock1, 3);
   
    while(1)
    {
        ans_len = sizeof(client);
        sock2 = accept (sock1, &client, &ans_len);
        write (sock2, MSG_TO_SEND, sizeof(MSG_TO_SEND));
        total+=1;
        ans_len = read (sock2, buffer, BUF_SIZE);
        write (1, buffer, ans_len);
        printf("Client no %d\n", total);
        shutdown (sock2, 0);
        close(sock2);
    };
  return 0;
}


Но после процесса компиляции компилятор выдал сообщение:
ser.c: В функции ‘main’
ser.c:41: предупреждение: passing argument 2 of ‘accept’ from incompatible pointer type

Не могу понять, чего ему не нравится? Я попробовал скомпилировать тот же исходник на универском компе (там fedora стоит), всё скомпилировалось нормально. У меня установлена ubuntu. Мне посоветовали установить библиотеки разработок:
sudo aptitude install gcc
sudo aptitude install glibc6-dev

Сделал, но и это не помогло. Выдает всю ту же ошибку:
ser.c: В функции ‘main’
ser.c:41: предупреждение: passing argument 2 of ‘accept’ from incompatible pointer type

Что нужно сделать, что бы компиляция проходила успешно?

Оффлайн Surzh

  • Участник
  • *
  • Сообщений: 153
    • Просмотр профиля
Re: Разработки сетевых приложений
« Ответ #1 : 06 Март 2009, 16:21:48 »
sock2 = accept (sock1, (sockaddr*) &client, &ans_len);
return 0;

Оффлайн Viktor_E

  • Автор темы
  • Новичок
  • *
  • Сообщений: 4
    • Просмотр профиля
Re: Разработки сетевых приложений
« Ответ #2 : 06 Март 2009, 17:21:42 »
sock2 = accept (sock1, (sockaddr*) &client, &ans_len);
Компилятор пишеть:
ser.c: В функции ‘main’
ser.c:41: ошибка: ‘sockaddr’ undeclared (first use in this function)
ser.c:41: ошибка: (Each undeclared identifier is reported only once
ser.c:41: ошибка: for each function it appears in.)
ser.c:41: ошибка: expected expression before ‘)’ token
ser.c:41: ошибка: too few arguments to function ‘accept’

Оффлайн Surzh

  • Участник
  • *
  • Сообщений: 153
    • Просмотр профиля
Re: Разработки сетевых приложений
« Ответ #3 : 06 Март 2009, 17:53:03 »
sock2 = accept (sock1, (sockaddr*) &client, &ans_len);
Компилятор пишеть:
ser.c: В функции ‘main’
ser.c:41: ошибка: ‘sockaddr’ undeclared (first use in this function)
ser.c:41: ошибка: (Each undeclared identifier is reported only once
ser.c:41: ошибка: for each function it appears in.)
ser.c:41: ошибка: expected expression before ‘)’ token
ser.c:41: ошибка: too few arguments to function ‘accept’

Да, точно.. сорри
sock2 = accept (sock1, (struct sockaddr*) &client, &ans_len);
return 0;

 

Страница сгенерирована за 0.09 секунд. Запросов: 24.