Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.08.2015, 19:51   #1
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию Нет соеденения

Добрый вечер уважаемые форумчане.
Решил начать изучать сетевое программирование по книге "Дуглас Камер, Девид Стивенс. Сети TCP IP. Разработка приложений типа клиент сервер для Linux POSIX". Но столкнулся с одной проблемой. Вот программный код из книги, состоящий из четырех файлов:
Код:
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>

#include <netinet/in.h>
#include <arpa/inet.h>

#include <netdb.h>
#include <string.h>
#include <stdlib.h>

#ifndef INADDR_NONE
#define INADDR_NONE 0xffffffff
#endif

extern int errno;

int errexit(const char * format, ...);

int connectsock(const char * host, const char* service, const char * transport) {
    struct hostent   * phe;
    struct servent   * pse;
    struct protoent  * ppe;
    struct sockaddr_in sin;
    int s,type;

    memset(&sin, 0, sizeof(sin));
    sin.sin_family = AF_INET;

    if(pse = getservbyname(service, transport))
        sin.sin_port = pse -> s_port;
    else if((sin.sin_port = htons((unsigned short)atoi(service))) == 0)
        errexit("can't get \"%s\" service entry\n", service);

    if(phe = gethostbyname(host))
        memcpy(&sin.sin_addr, phe -> h_addr, phe -> h_length);
    else if((sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE)
        errexit("can't get\"%s\" host entry\n", host);

    if((ppe = getprotobyname(transport)) == 0)
        errexit("can't get \"%s\"protocol entry\n", transport);

    if(strcmp(transport, "udp") == 0)
        type = SOCK_DGRAM;
    else
        type = SOCK_STREAM;

    s = socket(PF_INET, type, ppe -> p_proto);
    if(s < 0)
        errexit("can't create socket: %s\n",strerror(errno));

    if(connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0)
        errexit("can't connect to %s.%s: %s\n", host, service, strerror(errno));
}
Код:
int connectsock(const char * host, const char * service, const char * transport);

int connectTCP(const char * host, const char * service) {
    return connectsock(host, service, "tcp");
}
Код:
#include <stdarg.h>
#include<stdio.h>
#include <stdlib.h>

int errexit(const char * format, ...) {
    va_list args;

    va_start(args, format);
    vfprintf(stderr, format, args);
    va_end(args);
    exit(1);
}
Код:
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

extern int errno;
int TCPdaytime(const char * host, const char * service);
int errexit(const char * format, ...);
int connectTCP(const char *host, const char * service);

#define LINELEN 128

int main(int argc,char ** argv) {
    char * host    = "localhost";
    char * service = "daytime";

    switch(argc) {
    case 1:
        host = "localhost";
        break;
    case 3:
        service = argv[2];
    case 2:
        host = argv[1];
        break;
    default:
        fprintf(stderr, "usage: TCPdaytime [host [port]]\n");
        exit(1);
    }

    TCPdaytime(host,service);
    exit(0);
}

int TCPdaytime(const char * host, const char * service) {
    char buf[LINELEN + 1];
    int s, n;

    s = connectTCP(host, service);

    while((n = read(s, buf, LINELEN)) > 0) {
        buf[n] = '\0';
        (void)fputs(buf, stdout);
    }
}
Компилируется без проблем, но вывод программы такой:"can't connect localhost.daytime: Connection refused". Не могу понять, почему не происходит подключение к серверу. Помогите найти решение пожалуйста.
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Старый 16.08.2015, 20:01   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

предположительно на вашей машине не запущен daytime сервис.
(на моем сервере его тоже нет)
видимо старые данные.
попробуйте что-нить иное выбрать.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 16.08.2015, 20:06   #3
Pi-pi
Пользователь
 
Регистрация: 12.08.2015
Сообщений: 13
По умолчанию

Цитата:
Не могу понять, почему не происходит подключение к серверу.
А вы книгу не по диагонали читали? Собрали проект дейтайм сервера из глав перед этой? Запустили его?
Pi-pi вне форума Ответить с цитированием
Старый 16.08.2015, 20:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Решил начать изучать сетевое программирование
Может тогда стоит написать простенький чат?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.08.2015, 12:05   #5
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию

Цитата:
Сообщение от Pi-pi Посмотреть сообщение
А вы книгу не по диагонали читали? Собрали проект дейтайм сервера из глав перед этой? Запустили его?
В книге нету дейтайм сервера,чтобы его собирать и запускать.

Цитата:
Сообщение от Stilet Посмотреть сообщение
Может тогда стоит написать простенький чат?
Я думаю, что создать чат простенький было бы не плохо, но мне кажется у меня не достаточно знаний, поэтому я читаю книги по сетевому программированию. Если у кого есть литература,можете поделиться, буду очень благодарен.
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Старый 17.08.2015, 12:28   #6
Pi-pi
Пользователь
 
Регистрация: 12.08.2015
Сообщений: 13
По умолчанию

Цитата:
Сообщение от ser70 Посмотреть сообщение
В книге нету дейтайм сервера,чтобы его собирать и запускать.
О чем тогда главы:
10.3 Сервер службы DAYTIME
10.4 Схема организации процессов
10.5 Пример сервера DAYTIME
?
Что в файле TCPdaytimed.c?
Pi-pi вне форума Ответить с цитированием
Старый 17.08.2015, 13:53   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
мне кажется у меня не достаточно знаний
А ты сейчас и так описываешь простой чат. Только ответ тебе дает не человек а комп.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.08.2015, 15:00   #8
ser70
Форумчанин
 
Аватар для ser70
 
Регистрация: 02.10.2009
Сообщений: 255
По умолчанию

TCPdaytimed.c также выдает ошибку:
can't bind to daytime port: Permission denied. С чем это связано, я вообще запутался.
"Реальность воображаема, а воображаемое - реально" В. Соло
ser70 вне форума Ответить с цитированием
Старый 17.08.2015, 16:33   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,355
По умолчанию

Либо на данном порте кто-то уже сидит, либо это порт <= 1024 а для этих портов нужны административные привилегии.
waleri вне форума Ответить с цитированием
Старый 17.08.2015, 16:37   #10
Pi-pi
Пользователь
 
Регистрация: 12.08.2015
Сообщений: 13
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
либо это порт <= 1024 а для этих портов нужны административные привилегии.
Ну, естественно, 13 < 1024 ....
Pi-pi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
отправить пакет с существующего соеденения BETEP32 Работа с сетью в Delphi 13 30.05.2012 10:18
Проверка скорости интернет соеденения gufon Работа с сетью в Delphi 5 13.06.2011 23:53
Правильно или нет вот в чём вопрос но ошибок нет... Alexcool Помощь студентам 2 10.01.2010 13:55
Скорость соеденения blackstersl Работа с сетью в Delphi 3 30.10.2008 10:32