Сетевое программирование низкого уровня или абстракция классов? - PullRequest
1 голос
/ 31 октября 2010

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

Ответы [ 3 ]

1 голос
/ 01 ноября 2010

.NET C #

У вас есть:

  • API низкого уровня для работы с TCP, UDP и т. Д.
  • .NET Remoting
  • WCF (http, tcp, именованные каналы, MSMQ)

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

1 голос
/ 01 ноября 2010

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

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

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

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

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

1 голос
/ 31 октября 2010

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

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