Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лр3_Удаленное взаимодействие_Сокеты.doc
Скачиваний:
7
Добавлен:
20.08.2019
Размер:
3.66 Mб
Скачать

1.3. Создание приложения клиента с помощью потоковых сокетов.

Клиентские приложения на базе TCP и потоковых сокетов создаются в процессе выполнения четырех шагов.

1. Создается объект класса TcpClient (принадлежащий пространству имен System.Net.Sockets) для соединения с сервером. Данное соединение устанавливается с помощью метода Connect() класса TcpClient. Одна перегруженная версия этого метода принимает два аргумента: IP-адрес сервера и номер порта:

TcpClient client = new TcpClient();

client.Connect( serverAddress, serverPort);

Здесь аргумент serverPort имеет тип int и обозначает номер порта сервера. Аргумент serverAddress может быть как экземпляром класса IPAddress (содержащим IP-адрес сервера), так и строкой, указывающей имя владеющего приложения (хоста) сервера. Программист может либо передать ссылку на объект класса IPEndPoint, представляющий числовую пару "IP-адрес/номер порта", в другой перегруженный метод Connect(). Для установления соединения метод Connect() класса TcpClient вызовет метод Connect(), но уже в классе Socket. При успешном соединении метод TcpClient.Connect() возвращает положительное целое число, в противном случае – 0.

2. Для получения объекта сетевого потока типа NetworkStream класс TcpClient использует метод GetStream() для записи данных на сервер и их считывания с него. Методы WriteByte() и Write() объекта типа NetworkStream можно использовать для вывода соответственно отдельных байтов или набора байтов на сервере. Аналогичным образом методы ReadByte() и Read() объекта типа NetworkStream используются для ввода с сервера соответственно отдельных байтов или всего их набора.

3. Это фаза обработки, когда непосредственно осуществляется взаимодействие между клиентом и сервером. На данном этапе клиент применяет методы Read(),ReadByte(), WriteByte() и Write() объекта сетевого потока типа NetworkStream для выполнения соответствующих операций. С помощью процессов, сходных с используемыми сервером, для предотвращения блокирования связи с другими серверами при обработке данных одного соединения, клиент может использовать потоки.

4. После окончания передачи клиент разрывает соединение путем вызова метода Close() объекта типа NetworkStream. При этом закрывается базовый класс сокета (если NetworkStream имеет ссылку на этот сокет). Затем клиент вызывает метод Close() класса TcpClient для прекращения соединения TCP. В дальнейшем, с помощью метода Connect() можно снова установить новое соединение.

1.4. Взаимодействие между клиентом и сервером.

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

Приложения клиента и сервера содержит текстовые поля (TextBox), в которых пользователь вводит сообщения и отправляет их в другое приложение. Когда клиент и сервер отправляют сообщение "TERMINATE", то соединение между ними прерывается. После этого сервер ожидает запроса на соединение другого клиента.