Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

Восстановить пароль
Повторная активизация e-mail


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

Добрый вечер уважаемые форумчане.
Решил начать изучать сетевое программирование по книге "Дуглас Камер, Девид Стивенс. Сети 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, 21:01   #2
Пепел Феникса
Модератор
Заслуженный модератор
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Адрес: Москва
Сообщений: 21,006
Репутация: 3402

icq: 446843180
skype: phoenix_proger
По умолчанию

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

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

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

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

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


05:42.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru