[C++] Ищу либу или обвертку сокетов!

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Jakeroid, 5 Jun 2011.

  1. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    Порыл google, есть варианты, но они мне не понравились. В идеале конечно хотелось бы что-то с интерфейсом как в .NET. Но от .NET оно зависить не должно.
    Применять буду для посылки сообщений, текстовых. Нужно много инфы учить/писать, не хочется делать свой велосепед для сокетов.
    Вот спрашиваю у вас совета.
     
  2. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Почему много инфы?

    bind, listen, accept, struct sockaddr_in, send, recv, connect и макс еще несколько функций. Это помоему не много инфы.
    Можно написать класс на C++, максимально 30-45 мин заберет.
    Но мне лень. :eek:
     
  3. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    Но мне лень.

    Но ведь проверки нада понаписывать и т.д.?

    Вот читаю boost.asio. Ну пока вроде норм.
     
  4. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Какие проверки? Проверка успешности функции? Так там почти все функция возвращают -1 когда ошибка и 0 когда успешно.
     
  5. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    А если send или recv отправили/вернули не все количество байт? Нужно ведь еще раз выслать?
    Или я просто очень плохо знаком с сокетами? :D
     
  6. R0nin

    R0nin Member

    Joined:
    11 Jul 2010
    Messages:
    261
    Likes Received:
    24
    Reputations:
    8
    Нужно? В зависимости от имплементации. Вы, как программист решаете если нужно или нет. В таких случаях можно просто закрыть сокет, оптравить повторно и т.д., зависит от вашей фантазии. Но никак не понимаю, как влияет на множество информации повторный вызов одной и той же функции?
    Ладно, вам решать, но если даже сделаете отдельный класс для этого то все равно количество передоваемых аргументов, и возвращаемые значения не сильно изменяться.
    Удачи.
     
  7. St0nX

    St0nX Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    boost::asio тебе в помощь.
     
  8. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Тогда еще надо быть знакомым с тем, как правильно строить асинхронные приложения.
     
  9. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    из простого
    http://forum.antichat.ru/threadnav27529-1-10.html
     
  10. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Если с HTTP работать собрался заюзай WinHTTP. Еще у венды есть свой HTTP сервер...

    Ну а по сетевым функция посмотри мои tcp_client и tcp_rs, мне их больше чем достаточно для написания клиентов (хотя есть функция еще с поддержкой всех видов прокси, но ее я не собираюсь публиковать хех).
     
    _________________________
  11. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Посмотрел, это не простое, это быдлокод. Отсутствие квалификаторов const в нужных местах и по сути все те же низкоуровневые сокеты. Конструктор копирования зомг.

    Это вообще 5 баллов, про static мы и не слышали.

    А еще не слышали про смартпоинтеры, про то, что лучше всего создавать объекты в стеке, а не в куче... Можно много чего еще написать, я код 2 минуты листал.

    Не советую это использовать.
     
  12. St0nX

    St0nX Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    Не обязательно использовать асинхронные можно и блокирующие.
    Коннект
    PHP:
        system::error_code errorConnect;
        
    asio::ip::tcp::resolver::query query(сервер,порт или имя сервиса);
        
    asio::ip::tcp::resolver::iterator endPointIterator resolver->resolve(query,errorConnect);
        
    asio::ip::tcp::resolver::iterator endIteration;
        
    errorConnect asio::error::host_not_found;

        while (
    errorConnect && endPointIterator != endIteration)
        {
          
    socket->close();
          
    socket->connect(*endPointIterator++, errorConnect);
        }

        if (
    errorConnect)
             throw 
    system::system_error(errorConnect);
    пишем
    PHP:
    asio::write(socketrequest);
    читаем
    PHP:
    asio::read(*socket,
           
    response,
           
    bind(Функтор обработчик,asio::placeholders::error,asio::placeholders::bytes_transferred))
    Функтор должен возвращать кол-во байт сколько прочитать иначе 0.


    Высер засчитан. Троль походу.
     
  13. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Если ты ничего не понял из моего высказывания, то можешь валить из раздела. Код по ссылке действительно говно.

    В твоих примерах с asio, кстати, переменная socket не определена.
     
  14. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    komodia tcpip library типа того чтоли?
     
    2 people like this.
  15. retailret

    retailret New Member

    Joined:
    16 May 2011
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Используй Indy. Много для чего подходит, для сообщений всё готово.
     
  16. St0nX

    St0nX Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    Я не к тому, что код говно, мог бы рефакторинг сделать, а не оскарблять, тут многим бы на пользу было, да и как пример чистого кода. На сайте библиотеки достаточно информации. А так если уж критично то вот:

    PHP:
    typedef shared_ptr<asio::ip::tcp::socketptrSocket;
    ...
    ptrSocket socket;
    ...
    socket ptrSocket(new asio::ip::tcp::socket(io_service));
    Куда что вставлять думаю понятно.