/ / Мережеве програмування низького рівня або абстрагування класів? - c #, .net, мережеве програмування, winsock, sockets

Мережеве програмування Низький рівень або класова абстракція? - c #, .net, мережеве програмування, winsock, сокети

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

Відповіді:

1 для відповіді № 1

Ви все ще можете програмувати TCP або UDP низького рівняв C #, тому в цей момент дійсно просто питання вибору, чи хочете ви написати мережевий код на C, C # тощо ... Якщо все, що ви намагаєтеся зробити, це навчитися писати мережевий код, я б розглядав мова більше особистого вибору, оскільки основні мережеві концепції залишаються однаковими.


1 для відповіді № 2

.NET C #

Ти маєш:

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

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


1 для відповіді № 3

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

Багато людей, які починають з програмування сокетів, запускають окремий потік для читання, оскільки блокується метод Read. Це дуже неефективний спосіб вирішення проблеми, особливо на серверах. BeingRead / EndRead - це шлях.

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

Наступна велика річ із програмуванням сокетів - це як обробляти вхідні дані. Помилка новачка полягає в тому, щоб почати додавати рядки, що призведе до великого використання пам'яті в серверних додатках. Використовуйте byte[] буфери та пул буферів (шаблон набору ваг) для управління вхідними даними (це має бути простим завданням, якщо ви створили добре розроблений протокол).

Як бачите, це "досить велике завдання, яке неможливо виконати без попереднього досвіду. WCF - набагато кращий варіант, оскільки він обробляє більшість цих речей за вас.