logo
Лекции по ая

Сетевое программирование в c#

Среда .NET предоставляет два пространства имен: System.Net и System.Net.Sockets для работы с сетью. Эти пространства имен содержат классы и методы, которые позволяют легко создавать программы, которые могут взаимодействовать через сеть. Взаимодействие может осуществляться как с постоянным подключением по сети, так и без него.

Пространства имен System.Net содержат классы, обеспечивающие простой интерфейс программирования для различных сетевых протоколов. Дополнительные дочерние пространства имен, например такое как System.Net.Sockets, обеспечивают управляемую реализацию интерфейса Windows Sockets (Winsock) и доступ к сетевым потокам для защиты обмена данными между узлами.

WinSock или Windows socket - это интерфейс программного программирования (API) созданный для реализации приложений в сети на основе протокола TCP/IP.

Сокет, это конечная точка двухстороннего соединения между двумя системами работающих в сети. Когда два или более процесса взаимодействуют через сеть, они взаимодействуют используя сокеты. При работе по сокетам необходимо определить порт через который идет соединение. Порт представляет собой беззнаковое целое число, которое уникально идентифицирует процесс выполняющийся в сети.

Вот некоторые хорошо известные номера портов охарактеризованные типами сервисов которые их предоставляют: HTTP 80, Telnet 23, SMTP 25, SNPP 444, DNS 53, FTP (Data) 20, FTP (Control) 21.

В Microsoft .NET поддерживается синхронный и асинхронный тип соединения при использовании сокетов. Также известные как, блокированный и не блокированный режим работы. Существуют весьма тонкие различия между двумя этими методами. Когда работаем в синхронном режиме, вызов метода блокирует сам себя до тех пор пока операция не будет полностью закончена (не будет получен ответ об удачном завершении операции). В другом режиме работы, т.е. асинхронном режиме, метод возвращается еще до того как время цикла обработки закончилось (ответ не требуется).

В синхронном режиме взаимодействия, серверное приложение слушает конкретный порт на предмет получения данных от клиента. Серверное приложение блокируется (для других клиентов) до тех пор пока не получит данные от клиентского приложения. Во время работы в асинхронном режиме, сервер может обрабатывать множество клиентских запросов одновременно. Асинхронные команды, использующие сокеты обычно применяются для задач которые требуют больших затрат времени. Типичные примерами таких задач является открытие больших файлов, отправка запросов базе данных с большим объемом данных, подсоединение к удаленному компьютеру, удаленный доступ к ресурсам требующих больших временных затрат.

Асинхронные вызовы на самом деле работают в раздельных потоках.Обычно программа имеет два вида потоков, программный поток и рабочий поток. Программный поток - это основной поток программы; рабочий поток - это поток работающий в фоне, для обеспечения асинхронных операций.

Класс Socket в пространстве имен System.Net.Sockets содержит и синхронные и асинхронные методы. Connect() и Recive() методы предназначены для синхронного использования, BeginConnect() и EndConnect(), BeginReceive() и EndReceive() асинхронные.