На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Схема организации простого сервера с помощью потоковых сокетов на 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.




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





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




Смартфон с функцией LTE-A и скорость интернета
C# Visual Studio и базы данных: ошибочное использование идентификатора


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.