Вот такое клиент-сервер приложение:

advertisement
Лабораторная работа №4
Тема «Построение сетевого приложения с использованием протокола ТСР»
Класс TcpClient инкапсулирует соединение TCP и представляет множество свойств для
управления соединением, включая буферизацию, размер буфера и длительность таймаутов.
Чтение и запись осуществляются запросом объекта NetworkStream через метод GetStream ().
Создание TCPClient использующего локальную конечную точку.
IPAddress ipAddress = Dns.Resolve (Dns.GetHostName ()).AddressList[0];
IPEndPoint ipLocalEndPoint = new IPEndPoint (ipAddress, 11000);
TcpClient tcpClientA = new TcpClient (ipLocalEndPoint);
Создание TCPClient используя имя хоста и номер порта
TcpClient tcpClient = new TcpClient ();
tcpClient.Connect ("www.contoso.com", 11002);
Класс TcpListener прослушивает входящие соединения TCP методом Start (). Когда
приходит запрос соединения, необходимо использовать метод AcceptSocket () для возврата
сокета для соединения с удаленной машиной, или же вызвать метод AcceptTcpClient (), чтобы
использовать высокоуровневый объект TcpClient для коммуникаций.
Реализуйте следующий пример, который демонстрирует реализацию консольного клиент –
серверного приложения, обменивающиегося сообщениями.
Серверное приложение:
Подключите дополнительно следующие пространства имен
using System.IO;
using System.Net;
using System.Net.Sockets;
1
Клиентское приложение:
Подключите дополнительно следующие пространства имен
using System.IO;
using System.Net;
using System.Net.Sockets;
Рассмотрим возможность передачи файла из клиентского приложения на удаленную машину
сервера.
Любой ввод и вывод информации в .Net Framework включает в себя использование
потоков.
Поток - абстрактное представление последовательного устройств, облегчающее
последовательное хранение данных и доступ к ним (по одному байту в каждый конкретный
момент времени). В качестве такого устройства могут выступать расположенный на диске
файл, принтер, область памяти, любой другой объект допускающий последовательное
считывание и запись информации).
В пространстве имен System.IO хранятся классы, предназначенные для считывания и
записи данных в файлы. Классы:
File – содержит статические методы для манипуляции файлами (создание, копирование,
удаление); Directory – содержит статические методы для манипуляции директориями;
2
Path – статических класс, «путь»; FileInfo – не обладает статическими методами,
соответствует физическому фалу, во многом дублирует функциональность File;
Типичное приложение будет иметь множество компонентов и и может быть
распространено через различные системы и сети. Если двум компонентам необходимо
общаться друг с другом, то им необходим механизм для обмена данными. Есть несколько
способов реализовать этот механизм. Первый способ это разработать собственный протокол и
передать объект. Это означает, что получатель должен знать протокол, используемый
отправителем для воссоздания объекта, что усложняет разработку сторонних компонентов.
Следовательно, должен быть универсальный и эффективный протокол передачи объектов
между компонентами. Сериализация создана для этого, и компоненты используют этот
протокол для передачи объектов.
Классы, производящие сериализацию и десериализацию в .NET Framework, называются
классами форматирования (formatters).
Использование класса BinaryFormatter является наиболее эффективным и
универсальным, но и самым закрытым способом сериализации.
Существует много различных потоков, например: FileStream, MemoryStream,
BufferedStream, NetworkStream
Основные классы, производные от Stream
Класс
Описание
Доступ к файлам
Блок памяти (часто используется для
работы с буферами)
Данные полученные в виде потока по
сетевому соединению
FileStream
MemoryStream
NetworkStream
Основные свойства и методы класса Stream
Методы
Read
ReadByte
Write
WriteByte
Position
Описание
Чтение заданного количества байтов, начиная с текущей
позиции. Возвращает количество успешно прочитанных байтов
Чтение отдельного байта. Если текущая позиция находится в
конце потока, возвращает -1
Запись заданного количества байтов начиная с текущей
позиции
Запись отдельного байта
Позиция в текущем потоке
Класс FileStream
Файл - основная единица файловой системы, предназначенная для хранения информации. При
открытии для чтения/записи файл становится потоком.
Класс FileStream используется для открытия, чтения, записи и закрытия файлов. Для открытия
файла или создания нового нужно создать объект класса FileStream
FileStream(ByVal strFileName As String, ByVal fm As FileMode, ByVal fa As FileAccess, ByVal fs As
FileShare)
где, strFileName определяет имя файла;
FileMode определяет операцию с файлом;
Следующий пример клиент –серверного приложения осуществляет отправку файла 111.txt со
стороны клиентского приложения в серверное приложение.
Реализуйте следующие консольные приложения.
3
Серверное приложение
using
using
using
using
using
using
System.IO;
System.Net;
System.Net.Sockets;
System.Runtime.Serialization;
System.Runtime.Serialization.Formatters;
System.Runtime.Serialization.Formatters.Binary;
подключить через Add Reference, выбрать System.Runtime.Serialization.Formatters
Серверное приложение
}}}
4
Клиентское приложение
Дополнительный материал:
http://wladm.narod.ru/C_Sharp/filesstreams.html
http://grav4ik.ucoz.ru/publ/10-1-0-35
САМОСТОЯТЕЛЬНО ВЫПОЛНИТЬ:
1. Реализовать задание по вариантам из лабораторной работы № 3, используя класс
TCPClient и передачу данных с использованием класса Stream.
2. Данные вводимые в форму клиентского приложения индивидуального задания варианта
сохранять в файл и пересылать на компьютер, где расположено серверное приложение.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Как создать экземпляр класса TCPClient?
2. Назначение объекта класса TCPListener?
3. Какое пространство имен нужно добавить для использования классов TCPClient,
TCPListener?
4. Использование потоков при вводе и выводе информации, основные класса для работы с
потоком?
5. Что такое серилизация?
6. Методы класса Stream?
7. Класс FileStream, создание объекта данного класса?
5
Download