2010-10-02 6 views
21

Я новичок в использовании C++, но у вас есть общая идея его синтаксиса и удобства использования. Я хочу научиться общаться через сети с помощью программирования на C++, хотя я не могу найти никаких учебных пособий для C++. Кто-нибудь знает какие-либо хорошие ресурсы, чтобы узнать о сети с C++ или с чего начать?Взаимодействие с C++

+2

Я дал обширный ответ на socketprogramming в C++ [здесь] (http://stackoverflow.com/questions/2843277/c-winsock-p2p/ 2920787 # 2920787). Надежда, которая может помочь – Default

ответ

21

Учитывая вашу новизне на C++, я бы не рекомендовал строить напрямую на API сокетов, если вы не можете не найти подходящую библиотеку для использования. Boost.Asio даст вам огромное начало и выведет вас на абстракции более высокого уровня, используемые в сетевом программировании.

Легко начать с создания системы сокетов, чтобы получить что-то, что «вроде» работает, а затем проводить недели, отлаживая угловые случаи, которые происходят только в условиях реального времени и нагрузки. Правильно использовать boost::asio - это, скорее всего, нелегкая прогулка, даже если она защищает разработчиков от сложностей обработки сырых сокетов.

Если цель состоит в том, чтобы научиться правильно использовать сырые сокеты (или какой-либо другой механизм транспорта, такой как RPC), то, во что бы то ни стало, сворачивайте свои собственные онлайн-образцы и документы, чтобы понять отдельные BSD или Winsock API - если Цель состоит в том, чтобы как можно быстрее решить бизнес-задачу с помощью высококачественного кода как на стороне бизнеса, так и на сетевой инфраструктуре, а затем использовать хорошую сетевую библиотеку. В этом случае ваш вопрос указывает на желание учиться, поэтому использование библиотеки не может быть лучшим способом достижения поставленной вами цели.

+2

Почему-то моя группа выступает против идеи использования boost.asio, знаете ли вы, почему это может быть? Кажется, что это правильный способ приблизиться к такой вещи: S – TopGunCoder

+8

Проблема с вашими рассуждениями (новые люди -> API-интерфейсы сокетов слишком продвинуты) заключается в том, что ... ну .. с этим отношением, как вы можете ожидать, что он учится? Иногда вам приходится заставлять себя мешать в вещах выше вашего уровня комфорта. Подход «найти библиотеку, чтобы делать все», особенно в такой простой теме, вносит свой вклад в проблему, когда так мало людей, которые могут реализовать эти библиотеки в первую очередь. – asveikau

+0

@asveikau - пункт снят, см. Редактирование. –

0

В стандартной библиотеке C++ нет поддержки для этого, поэтому вам нужно либо использовать системный API, либо некоторую библиотеку абстракции, например. QT.

7

Я уверен, что куча людей C++, которые презирают способ выполнения вещей, ненавидят меня за это, но классический подход заключается в использовании Berkeley socket APIs (так называемый, поскольку они имеют свое происхождение в BSD). Если вы ориентируетесь на Windows, API-интерфейсы, совместимые с большинством источников, вдохновленные Unix, называются Winsock. Я бы сказал, сделайте поиск в Интернете для socket tutorial, и вы, вероятно, получите полезную информацию. С небольшим вниманием и, возможно, с #ifdef или двумя, создавать код, который работает на Linux, BSD, Mac (которые предоставляют сокеты BSD) и Windows (с Winsock), не так сложно, используя то, что является общим между этими двумя интерфейсами.

Для более склонных C++ людей, не относящихся к C-стилю, или тех, кому не нравится кодировать OS API, я уверен, что там есть библиотеки C++, которые предоставляют обертки и абстракции для этих же концепций. Поскольку Boost кажется довольно популярным, я бы сказал, see what they have.

1

C++ является объектно-ориентированным языком и открытым, так что вы можете заимствовать из других языков, в частности, С. но вот несколько книг, которые могли бы помочь , http://wjyl.nuaa.edu.cn/kfyy/article/C++%20Network%20Programming%20Volume%201.pdf и возможно http://www.cs.wustl.edu/~schmidt/PDF/ACE-tutorial.pdf среди много. там есть и другие.

Смежные вопросы