Сеть в .net / C#

Может ли кто-нибудь указать мне правильное направление для изучения работы в сети на C# /. Net 3.5? Примеры кода и пояснения приветствуются. В основном я ищу, как делать асинхронные / многопоточные модели сервер / клиент.

Я довольно хорошо знаком с основами того, как добиться этого на C++ с помощью WinSock, но, хотя все мои исследования, похоже, не могут понять эту концепцию на C#.

Спасибо за любую помощь, которую вы можете оказать :)

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
8 443
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В мире .NET 3.5 вам обязательно нужно изучить Фонд связи Windows - .NET framework для работы в сети.

Полезная ссылка:

Синхронные и асинхронные операции (в WCF)

Вы можете найти полезную информацию о WCF в StackOverflow, просматривая сообщения тега с тегом WCF

Это зависит от того, на чем вы хотите сосредоточиться.

Если вы хотите сосредоточиться на функциональности и оставить все необходимое для фреймворка, начните с Windows Communication Foundation.

Если вы хотите построить собственную сантехнику, используйте класс System.Net.Sockets.Socket.

Ответ принят как подходящий

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

TcpClient / UdpClient

Они обеспечивают относительно тонкую обертку нижележащих сокетов. По сути, он обеспечивает поток через сокет. Вы можете использовать асинхронные методы в NetworkStream (BeginRead и т. д.). Мне это не нравится, так как обертка не так уж много и имеет тенденцию быть немного более неудобной, чем использование сокета напрямую.

Розетка - Выбрать

Это обеспечивает классическую технику Select для мультиплексирования ввода-вывода нескольких сокетов в один поток. Больше не рекомендуется.

Розетка - стиль APM

Модель асинхронного программирования (также известная как IAsyncResult, стиль начала / конца) для сокетов является основным методом асинхронного использования сокетов. И есть несколько вариантов. По сути, вы вызываете асинхронный метод (например, BeginReceive) и выполняете одно из следующих действий:

  1. Опрос для завершения по возвращенному IAsyncResult (почти не используется).
  2. Используйте WaitHandle из IAsyncResult, чтобы дождаться завершения метода.
  3. Передайте методу BeginXXX метод обратного вызова, который будет выполнен после завершения метода.

Лучший способ - №3, так как обычно он наиболее удобен. Если сомневаетесь, воспользуйтесь этим методом.

Некоторые ссылки:

Высокопроизводительные сокеты .NET 3.5

.NET 3.5 представил новую модель для асинхронных сокетов, которая использует события. Он использует «упрощенную» асинхронную модель (например, Socket.SendAsync). Вместо обратного вызова вы подписываетесь на событие для завершения, и вместо IAsyncResult вы получаете SocketAsyncEventArgs. Идея состоит в том, что вы можете повторно использовать SocketAsyncEventArgs и предварительно выделить память для ввода-вывода сокета. В сценариях с высокой производительностью это может быть намного эффективнее, чем использование стиля APM. Кроме того, если вы заранее выделяете память, вы получаете стабильный объем памяти, уменьшенную сборку мусора, дыры в памяти из-за закрепления и т. д. Обратите внимание, что беспокоиться об этом следует только в самых высокопроизводительных сценариях.

Резюме

В большинстве случаев используйте метод обратного вызова стиля APM, если вы не предпочитаете стиль метода SocketAsyncEventArgs / Async. Если вы использовали CompletionPorts в WinSock, вы должны знать, что оба этих метода используют CompletionPorts под капотом.

Другие вопросы по теме