2010-10-31 3 views
1

Я вижу много вопросов по теме сетевого программирования. Несмотря на все вопросы и ответы, я просто не знаю, какой путь лучше всего начать. Лучше ли начинать с самого низкого уровня или сразу работать в .NET C#, не вдаваясь в подробности ниже абстракции? Лучше ли работать с Winsock или BSD Socket в Linux?Сетевое программирование Низкий уровень или класс абстракции?

+1

Какова цель вашей системы? –

+0

Я просто хочу узнать, это моя цель. –

+0

, если вы хотите учиться ради того, чтобы иметь возможность делать персонал в сети, вы не знаете, что такое низкий уровень, вы можете использовать C# для простого персонала. если вы хотите реализовать протокол, тогда перейдите к rfc протокола и попробуйте реализовать его простые части. – none

ответ

1

Вы все еще можете выполнять низкоуровневое TCP или UDP-программирование на C#, поэтому на данный момент это действительно вопрос выбора, хотите ли вы написать сетевой код на C, C# и т. Д. Если вы все пытаясь понять, как писать сетевой код, я бы рассмотрел язык больше личного выбора, поскольку основные сетевые концепции остаются прежними.

1

.NET C#

У вас есть:

  • низкий уровень API для работы с TCP, UDP и т.д.
  • .NET Remoting
  • WCF (HTTP, TCP, именованные каналы , МСМК)

Я бы повторно оценил последний вариант, но зависит от того, что вы пытаетесь изучить: для создания распределенных приложений или подробных подробностей низкоуровневого API сокетов.

+0

У меня есть идея создать программу для мониторинга сети, что-то вроде этого. –

+0

Вы можете сделать это на C# в основном. Для очень конкретных ситуаций, если вам нужен метод, который отсутствует в .NET Framework, вы можете использовать PInvoke для его вызова. –

1

Все зависит от ваших существующих навыков программирования. Я бы не начинал с более низких уровней, таких как класс Socket (или TcpClient/UdpClient), не имея хотя бы базового понимания асинхронного программирования.

Многие люди, которые начинают с программирования сокетов, запускают отдельный поток для чтения после блокировки метода Read. Это очень неэффективный способ решить проблему, особенно на серверах. BeingRead/EndRead - это путь.

Вперед разрабатывает протокол передачи, поскольку TCP не гарантирует, что полное сообщение будет доставлено по одному. Это гарантирует, что ваши сообщения поступают в правильном порядке.

Следующая важная задача с программированием сокетов - обработать входящие данные. Ошибка новичка заключается в том, чтобы начать добавлять строки, которые приведут к большому количеству использования памяти в серверных приложениях. Для управления входящими данными используйте буферы byte[] и пул буферов для управления входящими данными (это должна быть простая задача, если вы создали хорошо разработанный протокол).

Как вы можете видеть, это довольно большая задача, чтобы не обходиться без опыта. WCF - это гораздо лучший вариант, поскольку он обрабатывает большую часть этого материала для вас.

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