Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сокеты, и ECONNREFUSED на внешнем IP

444
27 сентября 2009 года
patison
323 / / 15.03.2007
Пишу клиент/сервер под линукс (ubuntu).
Когда ставлю сервер на локалхост (т.е. server_addr.sin_addr.s_addr присваиваю inet_addr(127.0.0.1)) , то клиент на тотже локалхост по тому-же проту коннектится всё окей.
Однако когда ставлю сервер на свой внешний айпи , то при попытке подключиться клиентом на тот-же айпи, выдаёт ошибку ECONNREFUSED , что означает что "The target address was not listening for connections or refused the connection request".

Приходит в голову только то, что не так как надо ставлю сервер слушать .. Но в упор не могу понять в чём трабла.

Вот кусок кода серверной части:
 
Код:
sockaddr_in server_addr, client_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr( server_ip.c_str() );
server_addr.sin_port = htons( atoi(argv[2]) );

bindRes = bind(sockHandle, (struct sockaddr *)&server_addr, sizeof(server_addr));
listen( sockHandle, 10 );
clientSockHandle = accept(sockHandle, (struct sockaddr *) &client_addr, &clientSockLen);


А вот клиент:
Код:
this->sockHandle = socket(AF_INET, SOCK_STREAM, 0);
    if (this->sockHandle < 0)
        cout << "ERROR opening socket" << endl;

    this->server = gethostbyname( sHost.c_str() );
    if (this->server == NULL) {
        cout << "ERROR, getting host by name  "<< sHost << "\n" ;
        exit(0);
    }

    memset( &this->server_address, 0, sizeof(this->server_address) );
    this->server_address.sin_family = AF_INET;
    this->server_address.sin_port = htons(this->port);

    this->bConnected = (connect(this->sockHandle, (struct sockaddr *)&this->server_address, sizeof(this->server_address)) < 0) ? false:true;
2
27 сентября 2009 года
squirL
5.6K / / 13.08.2003
1. netstat -nlA inet - что показывает? порт слушается?
2. telnet на порт можно сделать?
3. файерволы имеются?
444
27 сентября 2009 года
patison
323 / / 15.03.2007
1. tcp 0 0 мой_айпи:3000 0.0.0.0:* LISTEN - Видимо слушается )
2. Можно
3. Да нету вроде.
43K
27 сентября 2009 года
loki231
76 / / 27.09.2009
Цитата:
memset( &this->server_address, 0, sizeof(this->server_address) );
this->server_address.sin_family = AF_INET;
this->server_address.sin_port = htons(this->port);


Это понятно.

А где установка this->server_address.sin_addr.s_addr? Похоже, что клиент у тебя всё время коннектится по адресу 0.0.0.0.

PS. Есть такая вещь, называется strace. Запусти своего клиента через strace (вот так: strace твой-клиент аргументы-клиента) и увидишь, с какими параметрами вызывается connect.

444
28 сентября 2009 года
patison
323 / / 15.03.2007
Хех, действительно, как-же я это упустил...
Причём в клиенте указывал куда коннктиться, после запуска, типа connect 127.0.0.1 . И не понимал каким боком он коннектится на локалхост если вводить белиберду, типа connect 2 :D
И за strace спасибо.. Оч полезная штука :))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог