Как отобразить IP-адрес и номер порта в текстовом поле, которое должно генерироваться динамически - PullRequest
1 голос
/ 20 января 2010

Есть ли способ отобразить системный IP-адрес и номер порта в текстовом поле, которое генерируется динамически ???

Я хочу, чтобы система поместила IP-адрес в текстовое поле в соответствии с машиной.

Сиддхарт

Ответы [ 2 ]

1 голос
/ 20 января 2010

Так как вы упомянули текстовое поле, я могу только постулировать, что вы говорите о веб-браузере, и в этом случае вы говорите о 99,9% времени, когда вы говорите о http, а затем о 99,999% времени о соединении TCP. Это означает, что ваше соединение будет иметь 4-кортеж, состоящий из исходного IP-порта и конечного IP-порта. В большинстве случаев номера портов достаточно стандартны (80) для пункта назначения (клиента).

Затем вы сталкиваетесь с очень распространенными проблемами NAT и т.п., поэтому я снова думаю, что вам нужно уточнить, какой тип IP-адреса вы хотите. Публично маршрутизируемый IP-адрес получается на стороне сервера, а адрес локальной сети - с локального хоста.

В более интересном случае (публично маршрутизируемый ip) я бы просто использовал скрипт на стороне сервера (python, PHP, C и т. Д.), Чтобы прочитать входящий IP-адрес, а затем использовать небольшой ajax, чтобы установить значение текстовое поле. Я сделал нечто подобное для проекта, и это сработало очень хорошо. Наша клиентская программа была написана на Python и C, но это даст вам представление ...

# Returns the client's public IP address (past any NATs)
def get_public_ip():
        return urllib.urlopen('http://ddih.org/ip.php').read().strip()

Я думаю, что-то вроде установки внутреннего HTML ... с этой веб-страницы ...

Надеюсь, это поможет.

1 голос
/ 20 января 2010

Ваша система не имеет a номер порта. Номера портов - это программная концепция, позволяющая различать различные приложения IP или UDP, которые могут захотеть прослушивать соединения на вашем IP-адресе.

Кроме того, вполне возможно иметь более одного IP-адреса. Фактически, ваша система почти всегда имеет два, если вы посчитаете адрес обратной связи (127.0.0.1). Даже если в наши дни даже многие потребительские ПК не имеют нескольких разъемов Ethernet.

Вы не сказали, что используете Win32, поэтому я не знаю, будет ли это полезно для вас, но вот код, который я написал однажды, который помещает все локальные IP-адреса (исключая обратную петлю) в MFC CComboBox. Это немного больше, чем хотелось бы видеть в эти дни, но вот оно.

size_t const Max_Expected_Addresses = 20; // Something rediculous
unsigned long IPADDRTBL_Size = sizeof(DWORD) + sizeof(MIB_IPADDRROW) * Max_Expected_Addresses;
PMIB_IPADDRTABLE IP_Address_Table = (PMIB_IPADDRTABLE) malloc (IPADDRTBL_Size);
if (GetIpAddrTable (IP_Address_Table, &IPADDRTBL_Size, TRUE) == NO_ERROR) {
    for (DWORD i = 0; i < IP_Address_Table->dwNumEntries; i++) {
        // Skip the loopback.
        if (IP_Address_Table->table[i].dwAddr == 0x0100007f) continue;

        if (m_IP_Address == "") m_IP_Address = String_Address(IP_Address_Table->table[i].dwAddr);
        m_IP_Address_List.AddString (String_Address(IP_Address_Table->table[i].dwAddr));
    };
}

m_IP_Address_List - это элемент управления MFC, определенный как CComboBox, который заполняется этим фрагментом. m_IP_Address - это строка CString, привязанная к элементу управления текстовым полем MFC (IIRC), который я использую для хранения выбранного в настоящий момент (или впервые обнаруженного при запуске) IP-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...