Порыл google, есть варианты, но они мне не понравились. В идеале конечно хотелось бы что-то с интерфейсом как в .NET. Но от .NET оно зависить не должно. Применять буду для посылки сообщений, текстовых. Нужно много инфы учить/писать, не хочется делать свой велосепед для сокетов. Вот спрашиваю у вас совета.
Почему много инфы? bind, listen, accept, struct sockaddr_in, send, recv, connect и макс еще несколько функций. Это помоему не много инфы. Можно написать класс на C++, максимально 30-45 мин заберет. Но мне лень.
Какие проверки? Проверка успешности функции? Так там почти все функция возвращают -1 когда ошибка и 0 когда успешно.
А если send или recv отправили/вернули не все количество байт? Нужно ведь еще раз выслать? Или я просто очень плохо знаком с сокетами?
Нужно? В зависимости от имплементации. Вы, как программист решаете если нужно или нет. В таких случаях можно просто закрыть сокет, оптравить повторно и т.д., зависит от вашей фантазии. Но никак не понимаю, как влияет на множество информации повторный вызов одной и той же функции? Ладно, вам решать, но если даже сделаете отдельный класс для этого то все равно количество передоваемых аргументов, и возвращаемые значения не сильно изменяться. Удачи.
Если с HTTP работать собрался заюзай WinHTTP. Еще у венды есть свой HTTP сервер... Ну а по сетевым функция посмотри мои tcp_client и tcp_rs, мне их больше чем достаточно для написания клиентов (хотя есть функция еще с поддержкой всех видов прокси, но ее я не собираюсь публиковать хех).
Посмотрел, это не простое, это быдлокод. Отсутствие квалификаторов const в нужных местах и по сути все те же низкоуровневые сокеты. Конструктор копирования зомг. Это вообще 5 баллов, про static мы и не слышали. А еще не слышали про смартпоинтеры, про то, что лучше всего создавать объекты в стеке, а не в куче... Можно много чего еще написать, я код 2 минуты листал. Не советую это использовать.
Не обязательно использовать асинхронные можно и блокирующие. Коннект 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(socket, request); читаем PHP: asio::read(*socket, response, bind(Функтор обработчик,asio::placeholders::error,asio::placeholders::bytes_transferred)) Функтор должен возвращать кол-во байт сколько прочитать иначе 0. Высер засчитан. Троль походу.
Если ты ничего не понял из моего высказывания, то можешь валить из раздела. Код по ссылке действительно говно. В твоих примерах с asio, кстати, переменная socket не определена.
Я не к тому, что код говно, мог бы рефакторинг сделать, а не оскарблять, тут многим бы на пользу было, да и как пример чистого кода. На сайте библиотеки достаточно информации. А так если уж критично то вот: PHP: typedef shared_ptr<asio::ip::tcp::socket> ptrSocket; ... ptrSocket socket; ... socket = ptrSocket(new asio::ip::tcp::socket(io_service)); Куда что вставлять думаю понятно.