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





В мире .NET 3.5 вам обязательно нужно изучить Фонд связи Windows - .NET framework для работы в сети.
Полезная ссылка:
Синхронные и асинхронные операции (в WCF)
Вы можете найти полезную информацию о WCF в StackOverflow, просматривая сообщения тега с тегом WCF
Это зависит от того, на чем вы хотите сосредоточиться.
Если вы хотите сосредоточиться на функциональности и оставить все необходимое для фреймворка, начните с Windows Communication Foundation.
Если вы хотите построить собственную сантехнику, используйте класс System.Net.Sockets.Socket.
Если WCF отвечает вашим потребностям, стоит взглянуть на него. ZeroC и другие альтернативные библиотеки более высокого уровня существуют. В противном случае есть несколько способов работать ближе к уровню сокета, если это то, что вам нужно.
Они обеспечивают относительно тонкую обертку нижележащих сокетов. По сути, он обеспечивает поток через сокет. Вы можете использовать асинхронные методы в NetworkStream (BeginRead и т. д.). Мне это не нравится, так как обертка не так уж много и имеет тенденцию быть немного более неудобной, чем использование сокета напрямую.
Это обеспечивает классическую технику Select для мультиплексирования ввода-вывода нескольких сокетов в один поток. Больше не рекомендуется.
Модель асинхронного программирования (также известная как IAsyncResult, стиль начала / конца) для сокетов является основным методом асинхронного использования сокетов. И есть несколько вариантов. По сути, вы вызываете асинхронный метод (например, BeginReceive) и выполняете одно из следующих действий:
Лучший способ - №3, так как обычно он наиболее удобен. Если сомневаетесь, воспользуйтесь этим методом.
Некоторые ссылки:
.NET 3.5 представил новую модель для асинхронных сокетов, которая использует события. Он использует «упрощенную» асинхронную модель (например, Socket.SendAsync). Вместо обратного вызова вы подписываетесь на событие для завершения, и вместо IAsyncResult вы получаете SocketAsyncEventArgs. Идея состоит в том, что вы можете повторно использовать SocketAsyncEventArgs и предварительно выделить память для ввода-вывода сокета. В сценариях с высокой производительностью это может быть намного эффективнее, чем использование стиля APM. Кроме того, если вы заранее выделяете память, вы получаете стабильный объем памяти, уменьшенную сборку мусора, дыры в памяти из-за закрепления и т. д. Обратите внимание, что беспокоиться об этом следует только в самых высокопроизводительных сценариях.
В большинстве случаев используйте метод обратного вызова стиля APM, если вы не предпочитаете стиль метода SocketAsyncEventArgs / Async. Если вы использовали CompletionPorts в WinSock, вы должны знать, что оба этих метода используют CompletionPorts под капотом.