Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
DUMP
73 / 47 / 26
Регистрация: 22.02.2015
Сообщений: 306
1

Как сделать bind с моим IP

28.08.2015, 15:38. Просмотров 1015. Ответов 7
Метки нет (Все метки)

Наверное тема стара и найти ответ в google 1-5 сек, но сейчас мне быстрее спросить здесь. Так вот:
C++
1
2
3
4
sockaddr_in local_addr;
    local_addr.sin_family = AF_INET;
    local_addr.sin_port = htons(666); 
    local_addr.sin_addr.s_addr = inet_addr("176.194.205.122");
Eсли заменить на 0 в последней строчке адрес, то выдан будет 127.0.0.1 адрес и в bind сработает, а если оставить так то bind ошибку выдаст. Как исправить ?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2015, 15:38
Ответы с готовыми решениями:

Как правильно перекомпилировать под windows функции connect, accept, bind?
компилятор пишет ошибку "переопределение. другая кмпоновка" смотрю про...

Почему если я задаю IP 127.0.0.1 то bind возвращает 0, а если задаю IP в сети, то bind возвращает -1
IP узнаю через 2IP.ru вот и если задаю полученный IP, то программа вылатает...

Повторный bind
Всем доброго времени суток. С сетями разбираюсь недавно и столкнулся с...

Код ошибки bind (socket)
Здрасьте спецы, есть программа сервер, просто слушает и выводит на экр...

Ошибка после функции bind
Пытаюсь первый раз написать по книге клиент-сервер. В этом практически ничего...

7
Bend3r
149 / 136 / 35
Регистрация: 29.07.2012
Сообщений: 709
28.08.2015, 23:07 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "stdafx.h"
 
#include <winsock2.h>
#include <ws2tcpip.h>
 
#pragma comment( lib, "ws2_32.lib")    // WSAStartup  WSACleanup
 
int main(int argc, char* argv[])
{
    // ----------------------------------------------------------------------
    //                                                  WSAStartup()
    // ----------------------------------------------------------------------
    WSADATA  wsaData = {0};
    int iResult = WSAStartup( MAKEWORD(2,2), &wsaData );
    if( iResult )
    {
        printf("WSAStartup()  Error %d \n\n", iResult);
        return 1;
    }else{
        printf("WSAStartup()  OK  \n\n");
    }
 
    struct addrinfo hints = { 0 };
    struct addrinfo *result = NULL;
 
    hints.ai_family = AF_UNSPEC;    // winsock2.h
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
 
    // ----------------------------------------------------------------------
    //                                                  getaddrinfo()
    // ----------------------------------------------------------------------
    iResult = getaddrinfo( "compname", "0", &hints, &result);
    if( iResult )
    {
        printf("getaddrinfo()  Error %d \n\n", iResult);
        WSACleanup();
        return 1;
    }else{
        printf("getaddrinfo()  OK \n\n");
    }
    // ----------------------------------------------------------------------
    //                                                 struct addrinfo
    //     Retrieve address from    struct addrinfo *result
    // ----------------------------------------------------------------------
    struct addrinfo *ptr = NULL;
    struct sockaddr_in  *sockaddr_ipv4;
    int i=0;
    for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) 
    {
        printf("getaddrinfo response %d\n", i++);
        printf("\tFlags: 0x%x\n", ptr->ai_flags);
 
        printf("\tFamily: ");
        switch (ptr->ai_family) {
            case AF_UNSPEC:
                printf("Unspecified\n");
                break;
            case AF_INET:
                printf("AF_INET (IPv4)\n");
                sockaddr_ipv4 = (struct sockaddr_in *) ptr->ai_addr;
                printf("\tIPv4 address %s\n",
                    inet_ntoa(sockaddr_ipv4->sin_addr) );
                break;
            case AF_INET6:
                printf("AF_INET6 (IPv6)\n");
                break;
            case AF_NETBIOS:
                printf("AF_NETBIOS (NetBIOS)\n");
                break;
            default:
                printf("Other %ld\n", ptr->ai_family);
                break;
        }
 
    }
    freeaddrinfo(result);
 
    // ----------------------------------------------------------------------
    //                                                  WSACleanup()
    // ----------------------------------------------------------------------
    iResult = WSACleanup();
    if( iResult )
    {
        printf("WSACleanup()  Error %d \n\n", iResult);
    }else{
        printf("WSACleanup()  OK \n\n");
    }
    return 0;
}
Здесь почитайте Как узнать свой внешний ip адрес?
0
DUMP
73 / 47 / 26
Регистрация: 22.02.2015
Сообщений: 306
29.08.2015, 00:51  [ТС] 3
Bend3r, программа IP получает ? Ну я свой ip знаю... но не работает всё равно bind.
0
Shvonder
20 / 35 / 24
Регистрация: 16.03.2015
Сообщений: 179
29.08.2015, 11:55 4
Лучший ответ Сообщение было отмечено DUMP как решение

Решение

DUMP, маршрутизатор (модем), настроить в режим Bridge (мост).
0
Evg
Эксперт CАвтор FAQ
19359 / 7208 / 538
Регистрация: 30.03.2009
Сообщений: 20,155
Записей в блоге: 30
29.08.2015, 12:04 5
Покопался в исходниках своих старых программ. Попробуй так:

C
local_addr.sin_addr.s_addr = INADDR_ANY;
0
NoMasters
Псевдослучайный
1909 / 1120 / 90
Регистрация: 13.09.2011
Сообщений: 3,178
29.08.2015, 15:13 6
Evg, INADDR_ANY — это как раз-таки ноль.
ТС: по идее слушающий сокет с нулями в адресе будет доступен из всех имеющихся сетей и локальный интерфейс не исключение.
А если делать connect, то выберется тот адрес, по которому возможно подключение. Для подключения к локалхосту в этом случае выбор 127.0.0.1 самоочевиден.
0
grgdvo
751 / 638 / 226
Регистрация: 02.09.2012
Сообщений: 1,883
30.08.2015, 03:40 7
Что возвращает bind?? Какую ошибку дает?
0
DUMP
73 / 47 / 26
Регистрация: 22.02.2015
Сообщений: 306
30.08.2015, 09:30  [ТС] 8
Да всё. Спасибо, ребят. В роутере дело оказалось.
0
30.08.2015, 09:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2015, 09:30

Winsock Bind Error 10014
bool Server::Bind() { server_address.sin_family = AF_INET; ...

Освобождение памяти после std:bind
Что имею: - CentOS - gcc 4.8 - valgrind Что делаю - С помощью...

Сокет сервер: bind() постоянно возвращает (-1)
Всем привет ! Вот значит делаю сокет сервер #include &lt;iostream.h&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru