Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Сетевое программирование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2013, 19:44   #1
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию Библиотеки для работы с сокетами

К примеру такой вот код есть для определения ip по доменному имени
Последние 3 библиотеки не подключаются - нет таких файлов, пробовал на VS 2010
Гуглил, предположил что они не для винды, пробовал заменить на
#include <windows.h>
#include <winsock2.h>
но куча ошибок с методами, подскажите как это реализовать на винде ?
Код:
#include <stdafx.h>
#include <stdlib.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
 
#ifndef   NI_MAXHOST
#define   NI_MAXHOST 1025
#endif
 
int main(void)
{
    struct addrinfo *result;
    struct addrinfo *res;
    int error;
 
    /* resolve the domain name into a list of addresses */
    error = getaddrinfo("www.example.com", NULL, NULL, &result);
    if (error != 0)
    {   
        fprintf(stderr, "error in getaddrinfo: %s\n", gai_strerror(error));
        exit(EXIT_FAILURE);
    }   
 
    /* loop over all returned results and do inverse lookup */
    for (res = result; res != NULL; res = res->ai_next)
    {   
        char hostname[NI_MAXHOST] = "";
 
        error = getnameinfo(res->ai_addr, res->ai_addrlen, hostname, NI_MAXHOST, NULL, 0, 0); 
        if (error != 0)
        {
            fprintf(stderr, "error in getnameinfo: %s\n", gai_strerror(error));
            continue;
        }
        if (*hostname != '\0')
            printf("hostname: %s\n", hostname);
    }   
 
    freeaddrinfo(result);
    return 0;
}
+ еще вопрос, получаю айпи домена и хочу послать запрос например GET (http), на какой порт слать ? всегда на 80 ?
Jugger вне форума Ответить с цитированием
Старый 17.03.2013, 21:02   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Гуглил, предположил что они не для винды,
эти хидеры были замечены на *nix'ах
Цитата:
но куча ошибок с методами
ошибки нужно тоже постить...

Цитата:
подскажите как это реализовать на винде
Код:
#include <windows.h>
#include <winsock2.h>
#pragma comment(lib,"Ws2_32.lib")
counter вне форума Ответить с цитированием
Старый 17.03.2013, 22:37   #3
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

Ясненько, оно вот такую кучу ошибок выдает
Все не влазит в пост, однотипные ошибки сократил
Код:
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(91): warning C4005: AF_IPX: изменение макроопределения
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(460): см. предыдущее определение "AF_IPX"
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(131): warning C4005: AF_MAX: изменение макроопределения
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(479): см. предыдущее определение "AF_MAX"
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(168): warning C4005: SO_DONTLINGER: изменение макроопределения
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(402): см. предыдущее определение "SO_DONTLINGER"
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(212): error C2011: sockaddr: переопределение типа "struct"
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(485): см. объявление "sockaddr"
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(390): error C2059: синтаксическая ошибка: константа
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(390): error C3805: константа: непредвиденная лексема, требуется либо "}", либо ","
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(524): warning C4005: IN_CLASSA: изменение макроопределения
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(287): см. предыдущее определение "IN_CLASSA"
...
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\ws2def.h(583): error C2011: sockaddr_in: переопределение типа "struct"
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(312): см. объявление "sockaddr_in"
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h(132): error C2011: fd_set: переопределение типа "struct"
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(68): см. объявление "fd_set"
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h(167): warning C4005: FD_SET: изменение макроопределения
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(102): см. предыдущее определение "FD_SET"
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h(176): error C2011: timeval: переопределение типа "struct"
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(111): см. объявление "timeval"
...
SDKs\Windows\v7.0A\include\winsock2.h(1578): error C2375: accept: переопределение; другая компоновка
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(742): см. объявление "accept"
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h(1600): error C2375: bind: переопределение; другая компоновка
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(747): см. объявление "bind"
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h(1619): error C2375: closesocket: переопределение; другая компоновка
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(752): см. объявление "closesocket"
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h(1638): error C2375: connect: переопределение; другая компоновка
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(754): см. объявление "connect"
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h(1659): error C2375: ioctlsocket: переопределение; другая компоновка
1>          C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock.h(759): см. объявление "ioctlsocket"
...
1>domain.cpp(18): error C3861: getaddrinfo: идентификатор не найден
1>domain.cpp(21): error C3861: gai_strerror: идентификатор не найден
1>domain.cpp(30): error C3861: getnameinfo: идентификатор не найден
1>domain.cpp(33): error C3861: gai_strerror: идентификатор не найден
1>domain.cpp(40): error C3861: freeaddrinfo: идентификатор не найден
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:03.33
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Jugger вне форума Ответить с цитированием
Старый 17.03.2013, 22:39   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
Код:
#include <windows.h>
#include <winsock2.h>
#pragma comment(lib,"Ws2_32.lib")
Так будет выдавать ошибки... надо в самом начале надо добавить
#define WIN32_LEAN_AND_MEAN
waleri вне форума Ответить с цитированием
Старый 18.03.2013, 18:39   #5
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

Нашел в чем проблема для большинства ошибок
Надо сначала подключать winsock2 а потом windows.h иначе последняя подключает более старую winsock
Но осталась проблема с четырьмя методами которые компилятор не понимает
Код:
1>domain.cpp(18): error C3861: getaddrinfo: идентификатор не найден
1>domain.cpp(21): error C3861: gai_strerror: идентификатор не найден
1>domain.cpp(30): error C3861: getnameinfo: идентификатор не найден
1>domain.cpp(33): error C3861: gai_strerror: идентификатор не найден
1>domain.cpp(40): error C3861: freeaddrinfo: идентификатор не найден
И вот это компилятор тоже не понял
Код:
#define WIN32_LEAN_AND_MEAN
Код:
1>domain.cpp(1): warning C4603: WIN32_LEAN_AND_MEAN: макрос не определен или определение изменилось после использования предкомпилированного заголовка
1>          Добавление макроопределения в предкомпилированный заголовок вместо определения его здесь
1>          domain.cpp(3): использование предкомпилированного заголовка
Jugger вне форума Ответить с цитированием
Старый 18.03.2013, 19:16   #6
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Код:
#include "Ws2tcpip.h"
counter вне форума Ответить с цитированием
Старый 18.03.2013, 19:50   #7
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

Спасибо работает
Jugger вне форума Ответить с цитированием
Старый 21.03.2013, 17:27   #8
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

еще один вопросег
как распечатать айпишник который я получил через getaddrinfo ?
вставил вот такое но ничего не выводит
Код:
cout<<result->ai_addr->sa_data<<endl;
Jugger вне форума Ответить с цитированием
Старый 21.03.2013, 23:42   #9
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от Jugger Посмотреть сообщение
еще один вопросег
как распечатать айпишник который я получил через getaddrinfo ?
вставил вот такое но ничего не выводит
Код:
cout<<result->ai_addr->sa_data<<endl;
наверно нужно почитать документацию
counter вне форума Ответить с цитированием
Старый 23.03.2013, 21:46   #10
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

ее я и читал
из того что там нашел и написал то что написал
насколько я понял айпишник остается в структуре addrinfo - 4 параметр getaddrinfo, в ней он содержится в структуре ai_addr, в которой 2 параметра, предположил что вйпишник во втором sa_data т к это строка из char
подскажите что не так
Jugger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подключение библиотеки для работы с сокетами василий- Visual C++ 0 05.10.2012 15:01
Библиотеки для GUI и работы с Excel документами Armatus Qt и кроссплатформенное программирование С/С++ 2 09.06.2012 08:52
Библиотеки для работы с архивами Rick93 Общие вопросы Delphi 2 17.01.2012 21:09
Функции библиотеки для работы со строками и символами на С++ Ice_Cherry Помощь студентам 0 03.06.2011 17:19
Как подключить библиотеки для работы с ODBC? bafy БД в Delphi 0 07.07.2009 11:15