Ваша система не имеет 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-адреса.