Russian Qt Forum

Qt => Работа с сетью => Тема начата: Demonn от Май 05, 2006, 13:33



Название: Как узнать IP? QT 3.3.3
Отправлено: Demonn от Май 05, 2006, 13:33
Добрый день!
Как узнать IP компа, на котором запущена программа? В частности, используется QServerSocket, но метод toString() возвращает "0.0.0.0"

Версия QT 3.3.3 и переход на другую в данный момент не возможен, посему прошу дать ответ примениетльно именно к этой версии.


Название: Как узнать IP? QT 3.3.3
Отправлено: Sergeich от Май 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 );
}


Название: Как узнать IP? QT 3.3.3
Отправлено: Demonn от Май 05, 2006, 14:09
>Sergeich

Спасибо!

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

 >Sergeich

hostent* he = gethostbyname( buf ); - возвращается 0
Q_UINT32 haddr = *((Q_UINT32*)he->h_addr_list[0]); -
в чем м/б проблема? сейчас под виндами


Название: Как узнать IP? QT 3.3.3
Отправлено: Sergeich от Май 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();
}


Название: Как узнать IP? QT 3.3.3
Отправлено: Demonn от Май 05, 2006, 14:50
Вот теперь все гут, спасибо окончательное :)