Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определения IP клиента подключаемого к серверу, Вопрос 
:(
    Опции темы
Flay
Дата 16.12.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.12.2006

Репутация: нет
Всего: нет



Как можно определить IP, который подключается к серверу? Функцией RECV считывается только содержимое пакета без заголовка. Остается только сокет, но как по нему определить IP? Я в MSDN не смог найти. Вот код сервера:

Код

    short int port;
    WSAStartup(0x101, &wsadata);
    sin.sin_family = AF_INET;
    port = htons(PORT);
    sin.sin_port = port;
    sock = socket(PF_INET, SOCK_STREAM, NULL);
    WSAAsyncSelect(sock, hWnd, WM_LISTSOCKET, FD_ACCEPT|FD_READ|FD_CLOSE);
    bind(sock, (sockaddr*)&sin, sizeof(sin));
    listen(sock, 2);
...
    case WM_LISTSOCKET:
        switch (LOWORD(lParam))
        {
        case FD_ACCEPT:
            SOCKET New;
            New = accept(sock, 0, 0);
            sockets[num]=New;
            status[num]=0;

            ++connections;
            break;
        case FD_READ:

            int HR;
            HR = recv((SOCKET)wmEvent , recvbuf, 255, NULL);
            if (HR == -1) break;
            ZeroMemory(&recvbuf, 255);
            break;

        case FD_CLOSE:
            closesocket(sockets[i]);
            sockets[i]=0; status[i]=0;
            --connections;
            break;
...

PM MAIL   Вверх
witex
Дата 16.12.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 16.10.2006
Где: Эстония

Репутация: 1
Всего: 4



Код

SOCKET client_socket; 
sockaddr_in client_addr; 
int client_addr_size=sizeof(client_addr);
while((client_socket=accept(mysocket, (sockaddr *) &client_addr, &client_addr_size)))
{
HOSTENT *hst;
hst=gethostbyaddr((char *) &client_addr.sin_addr.s_addr,4,AF_INET);
printf("+%s [%s] new connect!\n",
(hst)?hst->h_name:"",inet_ntoa(client_addr.sin_addr));
}

Структура HOSTENT заполняеться информации о клиенте! От туда и достаёшь инфу!
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
Flay
Дата 19.12.2006, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 16.12.2006

Репутация: нет
Всего: нет



Сейчас попробую
PM MAIL   Вверх
witex
Дата 19.12.2006, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 16.10.2006
Где: Эстония

Репутация: 1
Всего: 4



accept(sock, 0, 0); вот в чём ещё ошибка! ты не даёшь структуру sockaddr_in  в accept и размер структуры! посмотри документацию в мсдн на эту функцию!
По этому у тебя и нету заголовка пакета.
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.2514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.