Работа в сети с C / C ++ в среде Windows - PullRequest
1 голос
/ 23 марта 2009

Как лучше всего использовать сокеты на платформе Windows?

Базовые сокеты, наверное, TCP / IP. Может быть, для клиента чата или просто для обучения.

Может ли кто-нибудь привести пример использования WININET?

возможно ftpgetfile ()

Ответы [ 5 ]

2 голосов
/ 23 марта 2009

Это очень широкий вопрос, и он во многом зависит от ваших потребностей.

Какой уровень тебе нужен? HTTP / FTP? Или "просто сокеты" для вашего собственного протокола? Какая производительность вам нужна (количество соединений, ожидаемая скорость)?

Если вы решите использовать сырой API, вам, как правило, следует избегать WSAAsyncSelect, поскольку производительность ниже «нескольких» одновременных соединений. Блокирующие сокеты и поток на сокет тоже не слишком горячие. WSAEventSelect немного сложнее, но хорошо справляется со своей задачей (µtorrent обрабатывает много одновременных соединений). Чрезвычайно высокими нагрузками были бы Fancypants - порты завершения ввода / вывода. Вы также можете посмотреть на ASIO для улучшения переносимости.

Если вы хотите использовать стандартные протоколы, такие как HTTP / FTP, проверьте libcurl. Или, для меньших потребностей и меньших накладных расходов, стандартные функции Windows WININET (хотя имеет много ограничений).


Для использования функций WinINet попробуйте запустить здесь - может быть, это не пример, но, по крайней мере, дает вам достаточно материала для поиска;)

0 голосов
/ 23 марта 2009

Если вы хотите использовать это как учебный опыт, я бы также посмотрел на ACE . Кроссплатформенная структура C ++, которая реализует множество шаблонов, описанных в Шаблоны для параллельных сетей и сетевых объектов . Автор также написал на ACE (см. здесь ).

0 голосов
/ 23 марта 2009

Примеры WinInet, которые вы можете найти в msdn или codeproject.con

Способы использования вы можете найти в хорошей платформе, независимой от lib - boost :: asio

0 голосов
/ 23 марта 2009

Вы имеете в виду модель асинхронного ввода / вывода в Windows? Имеются опции select, WSAAsyncSelect, WSAEventSelect, Overlapped I / O, Port I / O Completion Port, также вы можете использовать Libevent и Boost Asio, которые оба являются кроссплатформенными.

0 голосов
/ 23 марта 2009

Для базового клиент-серверного приложения с TCP / UDP должно быть достаточно winsock.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...