Здравствуйте Network, Вы писали:
N>Здравствуйте!
N>У меня такая проблема :
N>Есть у меня приложение сервер, когда к нему подключаются там происходят стандартные действия.... И в конце концов, после связи получается переменная SOCKET типа, как из этой переменной получить IP клиента, подключившегося к серверу.......
N>Я думал , может через SOCKADDR_IN , но у меня как-то не получилось, может кто знает ответ на этот вопрос?....
getpeername() — вот что тебе поможет
Здравствуйте Network, Вы писали:
N>Здравствуйте!
N>У меня такая проблема :
N>Есть у меня приложение сервер, когда к нему подключаются там происходят стандартные действия.... И в конце концов, после связи получается переменная SOCKET типа, как из этой переменной получить IP клиента, подключившегося к серверу.......
Функция ниже заполняет свои параметры данными о хосте, с которым было установлено соединение (data_socket вернулся после connect() или accept())
int SockConn::GetRemoteProps(char * host, char * ipAddress,int & port)
{
LPHOSTENT phostent;
SOCKADDR_IN localAddr;
int res,size;
char * ipAddr;
unsigned long inaddr;
size=sizeof(SOCKADDR_IN);
res=getpeername(data_socket,(SOCKADDR*)&localAddr,&size);
if (res==SOCKET_ERROR)
return WSAGetLastError();
ipAddr=inet_ntoa(localAddr.sin_addr);
inaddr=inet_addr(ipAddr);
phostent=gethostbyaddr((char*)&inaddr,4,AF_INET);
if (phostent==NULL)
return WSAGetLastError();
strcpy(host,phostent->h_name);
strcpy(ipAddress,ipAddr);
port=htons(localAddr.sin_port);
return 0;
}