Поиск:

Ответ в темуСоздание новой темы Создание опроса
> socket no 127.0.0.1 
:(
    Опции темы
YahоО
Дата 19.6.2021, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 11.6.2015

Репутация: нет
Всего: 1



Код

int main()
{
    WSADATA wsaData; // служебная структура для хранение информации о реализации Windows Sockets старт использования библиотеки сокетов процессом (подгружается Ws2_32.dll)
    int result = WSAStartup(MAKEWORD(2, 2), &wsaData);    
    if (result != 0) {      // Если произошла ошибка подгрузки библиотеки
        cerr << "WSAStartup failed: " << result << "\n";
        system("pause");
        return result;
    }
    struct addrinfo* addr = NULL; // структура, хранящая информацию об IP-адресе  слущающего сокета    
    struct addrinfo hints;              // Шаблон для инициализации структуры адреса
    ZeroMemory(&hints, sizeof(hints));

    hints.ai_family = AF_INET;               // AF_INET определяет, что будет использоваться сеть для работы с сокетом
    hints.ai_socktype = SOCK_STREAM; // Задаем потоковый тип сокета
    hints.ai_protocol = IPPROTO_TCP;    // Используем протокол TCP
    hints.ai_flags = AI_PASSIVE;            // Сокет будет биндиться на адрес, чтобы принимать входящие соединения

    // Инициализируем структуру, хранящую адрес сокета - addr    
    result = getaddrinfo("127.0.0.1", "8000", &hints, &addr);  // Наш HTTP-сервер будет висеть на 8000-м порту локалхоста

    if (result != 0) { // Если инициализация структуры адреса завершилась с ошибкой, выведем сообщением об этом и завершим выполнение программы
        cerr << "getaddrinfo failed: " << result << "\n";
        WSACleanup();  // выгрузка библиотеки Ws2_32.dll
        return 1;
    }
    // Создание сокета
    int listen_socket = socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
    ...

Вопрос про адрес при создании (инициализации) серверного сокета, если указывать не "127.0.0.1" локалхоста, то какой адрес можно указывать?

Порт, с портом понятно, какой указать такой и будет, но с адресом и его возможными значениями не понятно.

Что вообще означает адрес - мы что можем указать произвольный адрес какого то удаленного и даже очень удаленного сервера в интернете? это разве допустимо? 
У конкретного адреса в интернете вполне может быть свой серверный сокет на таком же порту, и накладки быть не может, а если там порт до сих пор не задействован то значит как бы можно?
А если чужой порт указывать все же нельзя, то зачем указывать его вообще, т.е. он всегда будет своим собственным, так для сервера локалхоста это 127.0.0.1, а для сервера в интернете это его конкретный присвоенный ему айпи.

И тут дополнительный вопрос - если домашний пк в сети, тем самым у него уже есть айпи, то запустив короткую программу со своим слушающим сервером к нему уже может прислать запрос иногородний сайт?
PM MAIL   Вверх
Oldshelf
Дата 19.6.2021, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 22.4.2018

Репутация: нет
Всего: 3



Плохо разбираюсь в этом вопросе, но выскажу предположение.

Допустим, программа запущена на удалённом сервере, у которого есть внешний ip. Тогда при указании "127.0.0.1" она будет слушать внутренние запросы сервера (например, обращения от фронт-энд веб-сервера), а при указании внешнего ip - все запросы, поступающие извне (например, от пользователей, зашедших на сайт).

Чужой адрес слушать вряд ли получится. Запросы не будут поступать на сторонний сервер, какой бы адрес он ни слушал.
PM MAIL WWW   Вверх
YahоО
Дата 21.6.2021, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 11.6.2015

Репутация: нет
Всего: 1



127.0.0.1 адрес пк «localhost» специальный сетевой интерфейс «внутренней петли», с ним можно "договориться" с помощью С++, в данном случае он не интересен.
Но у пк в сети есть внешний адрес, и у С++ есть возможность при создании сокета указать адрес не обязательно 127.0.0.1 «localhost», 
и пожалуй не обязательно свой внешний адрес, и вопрос мой как раз и касается этого момента.

Проверить экспериментом свое предположение не могу, пока что мучаю пхпсокеты и похоже что мой фрихостер не позволяет продвинуться дальше чем:

Произошла ошибка: undefined, (Unknown)
Соединение с сервером закрыто
Обрыв соединения
Код: 1006

Поэтому и с сайта прислать запрос на свой пк естественно нет никакой возможности, и тем более указать в пк адрес сервера,
да к тому же по всей видимости для проверки потребуется еще какой то дополнительный "независимый" сайт-сервер.


PM MAIL   Вверх
_zorn_
Дата 9.7.2021, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Цитата(YahоО @  19.6.2021,  19:18 Найти цитируемый пост)
если указывать не "127.0.0.1" локалхоста, то какой адрес можно указывать?

0.0.0.0 - слушать все сетевые интерфейсы в системе.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1164 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.