Схема организации простого сервера с помощью потоковых сокетов на C#


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

Организация простого серверного приложения с TCP и потоковыми сокетами в C# проводится в 5 этапов. Во-первых, необходимо создать объект класса TcpListener (из пространства именSystem.Net.Sockets). Это необходимо для потокового сокета TCP, с помощью которого и «слушает» запросы сервер. Вызвать конструктор TcpListener можно так:

TcpListener sr = new TcpListener(pr);

При этом происходит связывание сервера и номера порта. Под номером порта мы здесь подразумеваем числовой идентификатор, который необходим процессу для самоидентификации на IP-адресе. С помощью таких IP (сетевых адресов) и осуществляется идентификация компьютеров в интернете. Да, все названия сайтов (к примеру, этого – upread.ru) –это просто псевдонимы IP-адресов. Любой процесс, который занят обработкой сетевой информации, идентифицируется с помощью связки адреса и номера порта, поэтому на одном адресе не может быть открыто два процесса на одном порту. Попытка связать уже присвоенный порт на IP-адресе приведет к логической ошибке.

Для начала получения запросов требуется организация их прослушивания. Второй этап процесса соединения – это вызвать метод Start класса Listener – активизируется начало прослушивания. Третий этап – это уже непосредственная установка соединения клиент-сервер. Управляется соединение с клиентом с помощью объекта класса System.Net.Sockets. Socket. Метод AcceptSocket (из класса TcpListener) если есть соединение возвращает объект Socket:

Socket conn = sr.AcceptSocket();

Данный метод может являться демонстрацией того, как в C# скрывается от разработчика внутренняя организация программы, данном случае сетевая. Программист имеет возможность написать предшествующее выражение в приложении на сервере, после этого классы из System.Net.Sockets будут заниматься соединениями и запросами.

На четвертом этапе идет обработка: клиентское и серверное приложения начинают взаимодействие помощью методов Send и Receive, определенных в объекте Socket. Эти методы, а также потоковые сокеты и TCP будут работать только тогда, когда соединение уже установлено. В этом их отличие от UDP и дейтаграммных сокетов: они будут работать и при отсутствии соединения – методы SendTo и ReceiveFrom.

Пятый и последний этап – прерывание соединения. Здесь вступает в дело Close метод. После данного этапа большая часть серверных приложений переходит на этап 2 – то есть ждет запросов.

Схема, описанная выше, не является идеальной, имеются и проблемы. Одной из таких проблем является тот факт, что на четвертом этапе, во время обработки сервером запроса, никакой другой клиент не сможет «достучаться» до сервера. Проблема, как правило, решается с помощью многопоточных серверов, у которых обработка происходит в отдельном потоке: создается подпроцесс Thread для обработки соединения; при этом класс Socket (илиTcpListener) освобождается, готов для следующих запросов. Такая многопоточная серверная архитектура применяется в современных сетевых серверах под управлением как Windows, так и UNIX.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, си шарп, сеть, сокеты




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Рецензия на книгу Страуд Джонатан Трилогия Бартимеуса
Урок 11. Перечисления Java
Метод reduce в JavaScript