C++ и сеть
Как раз таки С++ причём. Лучше использовать библиотеки, независящие от ОС, чем писать на ОС API.
Автору: запрос в гугл "C++ network" выдаёт кучу ссылок по теме. И читайте литературу по TCP/IP. В принципе и в Windows и в Linux используется интерфейс сокетов для работы с сетью.
Лучше для кого? ;)
Сокеты - они что в виндовсе, что в линкусе одинаково выглядят, так что не зачет.
Для кроссплатформенных приложений ;)
Сокеты - они что в виндовсе, что в линкусе одинаково выглядят, так что не зачет.
Так о чём и было сказано выше. Где незачёт ?
Прямо таки одинаково ? И один и тот же код с использованием сокетов и в винде и в линуксе будет компилироваться и правильно исполняться ? Не верю. :)
Формально стандартные функции идентичны (иначе они не были бы стандартными). Вот документация для bind из MSDN, и первая ссылка из гугла на ман по bind. Понятно, что в виндовс он базируется на winsock2, но человеку же нужно не кроссплатформенные программы писать, а с мат-частью ознакомиться. ;)
Хотя конечно, это уже оффтоп пошел.
начал разбираться в них, вроде все нормально, но вот одно только не понятно, есть функция
и во всех, найденных мной источниках что параметр
http://msdn.microsoft.com/en-us/library/ms740506%28VS.85%29.aspx
Может winsock тебе и нужен, но для кроссплатформенных приложений советую Qt! Это не только сеть, а полнофункциональный кроссплатформенный framework! Для С++ программиста просто чудо!:)
Интересует?
Файлы sock.h и sock.cpp.
Конечно мат.часть по сокетам и протоколам коммуникаций лишней не будет. Но реализовывать советую на базе кроссп-платформенной либы какой-нибудь.
Не так давно писал клиент/сервер для передачи файлов по сети. Писал под линуксом, и ессна юзал линуксовые либы для работы с сокетами. Когда всё потестил на локалхосте, то понял что тестить на разных тачках не получится, т.к. все вокруг меня сидят на венде. Только тогда я понял, насколько гибко было-бы написать платформо-независимый код.
Если всё-таки решите на винсоке писать, можете почитать про мой скромный опыт, в написании клиент/сервера вот тут - http://codermd.blogspot.com/2007/08/tcpip.html. Статья правда писалась более двух лет назад, и на оригинальность особо не претендует.
Сокеты - они что в виндовсе, что в линкусе одинаково выглядят, так что не зачет.
hardcase, видимо опыта межплатформенного использования сокетов у тебя не много. Так что незачет тебе :) Не вводи человека в заблуждение!
Создать сокет, и создать полноценное сетевое приложение это разные вещи.
T@Rak0t, если вкратце тебе надо определится какую модель приложения ты будешь строить. Простейший способ это по одному блокирующему сокету на нить (thread). Блокирующие сокеты довольно просты в использовании, но хороший сервер на них не построишь. Не блокирующие (non-blocking) сокеты позволяют построить реактивную модель, когда в одном потоке обрабатывается сразу много сокетов и события с ними происходящие опрашиваются select'ом, poll'ом, epoll'ом... В Window также есть возможность использования асинхронных сокетов через I/O Completion Ports
Сразу скажу что во всем разобраться не так просто, много подводных камней :) Но существует хорошая библиотека, совмещающая скорость и маштабируемость асинхронных сокетов, с довольно простым интерфейсом, и содержащая даже 3 примера простейшего HTTP сервера, это boost::asio :)
Сокеты - они что в виндовсе, что в линкусе одинаково выглядят, так что не зачет.
hardcase, видимо опыта межплатформенного использования сокетов у тебя не много. Так что незачет тебе :) Не вводи человека в заблуждение!
Создать сокет, и создать полноценное сетевое приложение это разные вещи.
T@Rak0t, если вкратце тебе надо определится какую модель приложения ты будешь строить. Простейший способ это по одному блокирующему сокету на нить (thread). Блокирующие сокеты довольно просты в использовании, но хороший сервер на них не построишь. Не блокирующие (non-blocking) сокеты позволяют построить реактивную модель, когда в одном потоке обрабатывается сразу много сокетов и события с ними происходящие опрашиваются select'ом, poll'ом, epoll'ом... В Window также есть возможность использования асинхронных сокетов через I/O Completion Ports
Сразу скажу что во всем разобраться не так просто, много подводных камней :) Но существует хорошая библиотека, совмещающая скорость и маштабируемость асинхронных сокетов, с довольно простым интерфейсом, и содержащая даже 3 примера простейшего HTTP сервера, это boost::asio :)
Решил попробовать socket-ы на вкус. В инете информации валом.
s_serv = socket(AF_INET, SOCK_STREAM, 0);
Возвращает мне -1, GetLastError говорит, что это: 10093.
Т.е. WSANOTINITIALISED.
Хотя я и не лезу в особенности винсока и функции WSA знать не хочу.
Забавно, но с такой ерундой в инете особо никто не сталкивался, как-то создание сокета у всех проходит. А я даже не знаю, куда копать, поскольку функция не моя, параметры все определил не я, и вообще мне не ясно, почему то, что у всего мира, любых самых последних чайников всегда работает, а у меня - нет.
Решил попробовать socket-ы на вкус. В инете информации валом.
s_serv = socket(AF_INET, SOCK_STREAM, 0);
Т.е. WSANOTINITIALISED.
Хотя я и не лезу в особенности винсока и функции WSA знать не хочу.
Читаем http://msdn.microsoft.com/en-us/library/ms740506%28VS.85%29.aspx
Особенно то место где
Особенно то место где
Да, это помогает, только почему-то об этом ни слова ни в одном примере сервера (и там где указано, что они под винду), и это совершенно нелогично, я думал вызов WSAStartup должен быть внутри socket вшит, ведь иначе программа сходу теряет переносимость, и зачем тогда вообще линуксовый синтаксис было поддерживать?
#ifdef WINDOWS
WSAStartup(....)
#endif
#ifdef LINUX
somthother(....)
#endif
}
А в качестве клиента возьмите IE/Opera/FF/Chrome... И ничего писать не потребуется! :D. Они подключатся через сокеты, я гарантирую это.