Russian Qt Forum
Ноябрь 23, 2024, 01:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как узнать IP? QT 3.3.3  (Прочитано 6107 раз)
Demonn
Гость
« : Май 05, 2006, 13:33 »

Добрый день!
Как узнать IP компа, на котором запущена программа? В частности, используется QServerSocket, но метод toString() возвращает "0.0.0.0"

Версия QT 3.3.3 и переход на другую в данный момент не возможен, посему прошу дать ответ примениетльно именно к этой версии.
Записан
Sergeich
Гость
« Ответ #1 : Май 05, 2006, 13:41 »

Была такая же проблема. Пришлось писать такой код:
Код:
#include <qhostaddress.h>
#ifdef Q_WS_WIN
#include <winsock2.h>
#endif
#ifdef Q_WS_X11
#include <unistd.h>
#include <netdb.h>
#endif

inline void swap32(void *v)
{
*((Q_UINT32 *)v) =
((*((Q_UINT32 *)v))>>24) | ((*((Q_UINT32 *)v))<<24) |
(((*((Q_UINT32 *)v))>>8)&0xff00) | (((*((Q_UINT32 *)v))&0xff00)<<8);
}

inline QHostAddress localHostAddress()
{
char buf[255];
gethostname( buf, 255 );
hostent* he = gethostbyname( buf );
Q_UINT32 haddr = *((Q_UINT32*)he->h_addr_list[0]);
int ws; bool endian;
qSysInfo(&ws, &endian);
if (!endian) swap32( &haddr );
return QHostAddress( haddr );
}
Записан
Demonn
Гость
« Ответ #2 : Май 05, 2006, 14:09 »

>Sergeich

Спасибо!

добавлено спустя:

 >Sergeich

hostent* he = gethostbyname( buf ); - возвращается 0
Q_UINT32 haddr = *((Q_UINT32*)he->h_addr_list[0]); -
в чем м/б проблема? сейчас под виндами
Записан
Sergeich
Гость
« Ответ #3 : Май 05, 2006, 14:48 »

Пардон, запостил старую версию. Правильней так:
Код:
#include <qhostaddress.h>
#ifdef Q_WS_WIN
#include <winsock2.h>
#endif
#ifdef Q_WS_X11
#include <unistd.h>
#include <netdb.h>
#endif

inline QHostAddress localHostAddress()
{
#ifdef Q_WS_WIN
WSAData wsadata;
if ( WSAStartup( MAKEWORD(2,0), &wsadata ) != 0 ) return QHostAddress();
#endif
char buf[255];
gethostname( buf, 255 );
hostent* he = gethostbyname( buf );
if ( he ) {
Q_UINT32 haddr = htonl( *((Q_UINT32*)he->h_addr_list[0]) );
return QHostAddress( haddr );
}
else return QHostAddress();
}
Записан
Demonn
Гость
« Ответ #4 : Май 05, 2006, 14:50 »

Вот теперь все гут, спасибо окончательное Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 20.