Если вы собираетесь использовать C ++, я второй «the_mandrill» выше, настоятельно рекомендую вам взглянуть на ASIO в Boost - это отличный способ написать код один раз и поддерживать обе платформы.
КакТо, является ли C ++ правильным языком, более субъективно.По моим личным ощущениям, если вам нужно спросить, шансы на это, это не лучший подход.
Причины выбора C ++ для реализации сетевого кода:
- Возможно достичь очень низкогозадержки и высокая пропускная способность с очень тщательно разработанным и реализованным кодом.
- Возможность явно контролировать управление памятью - избегая колебаний производительности, связанных со сборкой мусора.
- Потенциал для тесной интеграции сетевого кода в-процесс с другими собственными библиотеками.
- Потенциал для создания небольших компонентов, подходящих для развертывания в средах с ограниченными ресурсами.
- Низкоуровневый доступ к API сокетов C предоставляет такие функции, как параметры сокетов, для использования протоколов, выходящих за рамки стандартного.TCP / IP и UDP.
Причины отказа от C ++:
- Более низкая производительность при разработке кода по сравнению с языками высокого уровня (например, Java / C # / Python и т. Д.и т. д.)
- Большой потенциал для значительного внедренияошибки обозначения (злоупотребление указателем и т. д.)
- Требуются дополнительные усилия для проверки компиляции кода на каждой платформе.
Альтернативы, которые вы можете рассмотреть, включают:
- Python ... напрямую используя низкоуровневую поддержку сокетов или высокоуровневую библиотеку Twisted.Быстрая разработка с использованием удобных высокоуровневых идиом и минимальных усилий по переносу.Самый большой недостаток - слабая поддержка использования нескольких процессорных ядер для систем с высокой пропускной способностью.
- Ruby (socket) / Perl (IO :: Socket) ... Языки высокого уровня, которые могут быть особенно подходящими, если передаваемая информацияпредставлены в виде текстовых строк.
- Java ... сборка мусора упрощает управление памятью;широкий спектр существующих библиотек.
- языки CLR (C # и т. д.), а также сборщик мусора - например, Java ... WCF - эффективная структура, в рамках которой могут быть разработаны специальные протоколы ... что может оказаться полезным.
Вы также спросили: " Я понимаю, что мне придется использовать библиотеку Microsoft Visual C ++, так как кажется, что трудно использовать код C ++ из C #; это правда?"
Вы можете полностью избежать библиотек Visual C ++ - либо разработав язык, отличный от C ++, либо используя альтернативный компилятор C ++ - например, Cygwin или MinGW предлагают G ++ ... хотя я бы рекомендовал использовать VisualC ++ для построения кода C и C ++ для Windows.
Нетрудно использовать код C ++ из C # - хотя я не рекомендую его в качестве подхода ... он, вероятно, слишком сложен.Visual C ++ может (необязательно) скомпилировать «управляемый код» из исходного кода C ++ (есть несколько расширений синтаксиса для понимания и немного другой синтаксис для взаимодействия с использованием Mono, а не Visual C ++, но это не главные проблемы IMHO.) Эти объекты CLRнапрямую взаимодействовать с объектами C # и без проблем объединяться в одну сборку.Также легко получить доступ к собственным библиотекам DLL (потенциально написанным с использованием C ++ для собственной архитектуры) с помощью Pinvoke.Однако все это несколько неактуально, поскольку платформа .Net имеет хорошую поддержку для низкоуровневых сетей (аналогичную той, что предоставляется Winsock [2]) в system.net - это обеспечивает удобный C # -ориентированный интерфейс для аналогичных средств и будетскорее всего, предоставит более удобный API для разработки при использовании C # (или VB.Net или любого другого языка CLR.)