Современные системы программироавния

СОВРЕМЕННЫЕ СИСТЕМЫ ПРОГРАММИРОАВНИЯ

(часть I I)

Для студентов специальности

53 01 02 ''Автоматизированные системы обработки информации''

Минск 2011

ОБЩИЕ СВЕДЕНИЯ ОБ ЭУМК

СВЕДЕНИЯ ОБ ЭУМК

Электронный учебно-методический комплекс по дисциплине «Современные системы программирования (часть I I)» предназначен для студентов специальности 53 01 02 ''Автоматизированные системы обработки информации'' Электронный учебно-методический комплекс составлен на основе учебной программы по курсу «Современные системы программирования».

Комплекс разработан доцентом кафедры Информационных технологий автоматизированных систем БГУИР, кандидатом технических наук Германом Олегом Витольдовичем.

МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО ИЗУЧЕНИЮ ДИСЦИПЛИНЫ

В соответствии с учебным планом студенты дистанционной формы обучения специальности АСОИ изучают курс «Современные системы программирования (часть I I)» в 9 семестре.

Учебным планом по данному курсу предусмотрено изучение теоретических вопросов, практические (лабораторные) работы по наиболее актуальным темам, выполнение 2 контрольных работ. Изучение курса заканчивается сдачей экзамена. К сдаче экзамена студенты допускаются только при условии выполненных и защищенных лабораторных и контрольных работ.

Рекомендуется изучать курс «Современные системы программирования» в соответствии с рабочей программой. Сначала необходимо ознакомиться с содержанием курса, затем изучить лекционный курс, обращая внимание на вопросы, выделенные в рабочей программе, после чего выполнить задачи для решения (выполнения контрольных работ) в соответствии с заданием.

РАБОЧАЯ ПРОГРАММА КУРСА

КОНСПЕКТ ЛЕКЦИЙ

ИНДИВИДУАЛЬНЫЕ ПРАКТИЧЕСКИЕ РАБОТЫ

КОНТРОЛЬНАЯ РАБОТА

КОНТРОЛЬ ЗНАНИЙ

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К КУРСОВОМУ ПРОЕКТУ

РАБОЧАЯ УЧЕБНАЯ ПРОГРАММА

Учреждение образования

«Белорусский государственный университет

Информатики и радиоэлектроники»

УТВЕРЖДАЮ

Декан ФИТУ

________________ Л.Ю. Шилин

«___»___________ 2011 г.

Регистрационный № УД-_____________/р.

РАБОЧАЯ ПРОГРАММА

по дисциплине ''Современные системы программирования”

для специальности 53 01 02 ''Автоматизированные системы обработки

информации''

факультет ''Информационные технологии и управление''

кафедра ''Информационные технологии автоматизированных систем''

курс 4,5

семестр 8,9

лекции - 96 ч. (48ч- семестр 8, зачет - 8 семестр

48ч- семестр 9 экзамен - 9 семестр

лабораторные занятия - 48 ч.

(24 – семестр 8,

24 – семестр 9)

всего часов - 314.

форма получения высшего образования –

дневная

Минск 2010

Рабочая программа составлена на основе типовой учебной программы ''Современные системы программирования'', утверждённой Министерством образования Республики Беларусь ''15'' 06 2003 г., регистрационный номер №ТД- 1.149 /тип.

Составитель:

О.В. Герман,кандидат технических наук, доцент кафедры информационных технологий автоматизированных систем Белорусского государственного университета информатики и радиоэлектроники.

Рассмотрена и рекомендована к утверждению на заседании кафедры информационных технологий автоматизированных систем

протокол №_____от _______________2009 г.

Заведующий кафедрой _____________ В.С. Муха

Одобрена и рекомендована к утверждению Советом факультета информационных технологий и управления

протокол №_____от _______________2009 г.

Председатель ____________ Л. Ю. Шилин

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

Учебная рабочая программа «Современные системы программирования» разработана для студентов специальности 1-53 01 02 Автоматизированные системы обработки информации высших учебных заведений. Программа составлена в соответствии с требованиями Образовательного стпандарта № ОСРБ 1-53 01 02-2007 по специальности 1-53 01 02 Автоматизированные системы обработки информации и типовой учебной программы ''Современные системы программирования'', утверждённой Министерством образования Республики Беларусь ''15'' 06 2003 г., регистрационный номер №ТД- 1.149 /тип.

НАЗВАНИЕ ТЕМ ЛЕКЦИОННЫХ ЗАНЯТИЙ, ИХ СОДЕРЖАНИЕ, ОБЪЁМ В ЧАСАХ

№ пп Название темы Содержание Объем в часах (ауд.)
СЕМЕСТР 8 24 час.
Раздел 1. Технология программирования в С#.NET - 26 ч  
 
1. Вводная лекция Характеристика существующих технологий программирования. Классификация языков и систем программирования. История создания и перспективы развития систем программирования. Определение формальных языков. Классификация Н.Хомского. Задачи разбора языков. История и основные концепции платформы NET
2. Основные концепции программироваия в Visual Net Основы построения программ в С#. Классы и интерфейсы. Пространство имен. Наследование и инкапсуляция. Подключение пакетов (using).
3. Ввод/вывод информации Построение консольных приложений. Классы для работы с файлами. Сохранение текста и рисунков. Сериализация объектов.
4. Работа с базами данных Классы для работы с базами данных. SQL-адаптеры.
Работа в сети Организация клиент-серверного взаимодействия на основе проколов НTTP и TCP. Взаимодействие через порты.
Потоковое программирование Создание потоков. Реализация серверов и клиентов. Ввод-вывод данных через потоки. Анимация графических образов.
Компонентное программирование Создание собственных компонентов. Создание COM и ACTIVEX-компонентов и включение их в программу.
Создание сборок Построение DLL-функций. Работа с библиотеками. Сборки и их реализация.  
Раздел 2. WEB-ПРОГРАММИРОВАНИЕ - 6ч  
Основы WEB-программирования Работа с приложениями ASP. Создание Web-сервисов.
Работа с документами XML Работа с XML-базами данных. Обработка HTML-форм.  
Раздел 3. РАБОТА C ДАННЫМИ -16ч  
Основы работы с сервером SQL 2008 Создание баз данных. Форматы данных. Подключение сервера. Создание таблиц и представлений. Редактор запросов
Работа на основе классов ODBCConnection, OLEDBConection, SQLConnection. Технология LINQ Установление соединений. Выполнение SQL-запросов. Параметризованные запросы. Запросы на выполнение хранимых процедур.
Программирование визуального интерфейса с базами данных Визуальные компоненты и их использование: списки, меню, поля редактирования. Привязка полей таблиц к визуальным компоненам. Навигация по таблицам..
Итого: 8 семестр
СЕМЕСТР 9
Раздел 4. СЕТЕВОЕ ПРОГРАММИРОВАНИЕ В NET -26ч  
1. Вводная лекция Обзор сетевых протоколов. Базовые протоколы. Протоколы Интернет. Доменные сервера. Web-прокси
2. Создание сетевых приложений на основе сокетов TCP. Асинхронный и синхронный ввод-вывод. Класс TCPClient. Класс TCPListener. Пример приложения
3. Работа на основе протокола UDP Основные понятия протокола UDP. Описание класса UDPClient. Реализация файлового сервера. Прием и передача файла.
4. Работа на основе протокола HTTP HTTP-заголовки. HTTPWebRequest, HTTPWebResponse. Отсылка данных на сервер. реализация клиента WEBClient.
Работа с XML-документами Спецификация XML-документов. Классы для работы с XML-документами. Примеры использования
Электронная почта Протокол SMTP. Реализация типичного приложения для отсылки электронной почты. Принятие сообщений. POP3 и другие протоколы для работы с почтой.
Криптография в NET. Алгоритмические основы криптографии. Алгоритм RSA. Класс HashAlgorithm. Класс AssymetricAlgorithm.
Раздел 5. WEB-ПРОГРАММИРОВАНИЕ В NET(Расширенные возможности) -22ч
Создание ASP.NET-скриптов Особенности технологии ASP-NET. Мастер развертывания сценария ASP-NET. Передача параметров скрипту и возврат значений.
Элементы управления AJAX в ASP.NET Создание страницы AJAX. Создание WPF-приложения для браузера. Соображения юезопасности и развертывание приложения
WEB-сервисы Понятие сервиса и концепция его использования. Создание WEB-сервиса. Примеры.
Разработка офисных бизнес-приложений Функциональные возможности Office. Создание надстройки для Office. Модификация панели задач. Реализация смарт-тегов.
Основы WindowsWorkFlow Компоненты рабочего процесса. Описание визуального конструктора рабочих процессов. Описание хоста и клиента для рабочего процесса.
Итого: 9 семестр

2.2. ПЕРЕЧЕНЬ ТЕМ ЛАБОРАТОРНЫХ ЗАНЯТИЙ,
ИХ НАИМЕНОВАНИЕ И ОБЪЁМ В ЧАСАХ



№ пп Название темы Содержание Объем в часах (ауд.)
СЕМЕСТР 8 24 час.
1. Основы программирования в C#.NET Основы построения программ в С#. Классы и интерфейсы. Пространство имен. Наследование и инкапсуляция. Подключение пакетов (using).
2. Работа с файлами в С#.NET. Операции с файлами:чтение, запись, обновление, сериализация объектов. Сохранение рисунков.
3. Базы данных и язык SQL. Подключение к источнику данных. Обработка SQL запросов. Навигация по таблицам
4. Создание потоков. Об’явление потоков. Создание анимации на основе потоков.
Работа в сети Организация клиент-серверного взаимодействия на основе проколов НTTP и TCP. Взаимодействие через порты.
Графика в С#. Создание потоков. Реализация серверов и клиентов. Ввод-вывод данных через потоки. Анимация графических образов.
Итого семестр 8 24 час.
СЕМЕСТР 9 24 час.
Основы WEB-программирования Работа с приложениями ASP. Создание Web-сервисов.
Работа с документами XML Работа с XML-базами данных. Обработка HTML-форм.  
Создание WEB-сервисов   Разработка WEB-сервисов. Вызов методов сервиса из приложения клиента. Изучение файла конфигурации
Работа с AJAX в NET   Реализация механизма доступа к удаленной базе данных посредством компонениов AJAX
Реализация почтовой службы.   Формирование, отправка и прием почтовой корреспонденции
Создание собственных компонентов Использование мастера для создания компонентов пользователя. Подключение класса созданного компонента
Итого: 9 семестр

УЧЕБНО-МЕТОДИЧЕСКИЕ МАТЕРИАЛЫ

ЛИТЕРАТУРА

ОСНОВНАЯ

  1. О.В.Герман, Ю.О.Герман. Программирование на JAVA и C#. C-кт Петербург, “БХВ”, 2005- 510c.
  2. Пауэрс Л., Снелл М. MicroSoft Visual Studio 2008. C-кт Петербург. БХВ, 2009.- 1100с.
  3. Лабор В.В. Си Шарп. Создание приложений для Windows. – Мн., Харвест, 2003, - 382с.
  4. Гиббонз П. Платформа NET для Java программистов. Спб., Питер, 2001- 326с.
  5. Прайс Дж., Гандэрлой М. Visual C#.NET .Полное руководство. Киев, Век, 2004, -958с.

ДОПОЛНИТЕЛЬНАЯ

  1. Андерсон Р. Доказательство правильности программ. – М, Мир.1982
  2. Архангельский Б.В., Черняховский В.В. Поиск устойчивых ошибок в программах.- М., Радио и связь, 1989.

3.2. ПЕРЕЧЕНЬ КОМПЬЮТЕРНЫХ ПРОГРАММ, НАГЛЯДНЫХ
И ДРУГИХ ПОСОБИЙ, МЕТОДИЧЕСКИХ УКАЗАНИЙ
И МАТЕРИАЛОВ И ТЕХНИЧЕСКИХ СРЕДСТВ ОБУЧЕНИЯ

1. Система программирования VISUAL STUDIO NET 2005 (2008,2010)

2. Система программирования MS SQL Server 2000 (2005, 2008)

3. Пособие [1] в списке основной литературы

УЧЕБНО-МЕТОДИЧЕСКАЯ КАРТА ДИСЦИПЛИНЫ

Номер недели Номер темы (по п.2.1) Название вопросов, которые изучаются на лекциях Практические (семинарские) занятия (номера) (по п.2.2) Лабораторные занятия (номера, перечень используемых материалов) (по п.2.3) Самостоятельная управляемая работа студентов (часы) Наглядные и методические пособия (номера) (по п.3.2) Литература (номера) (по п.3.1) указываются главы, разделы, параграфы, страницы Формы контроля знаний студентов  
 
 
Вводная лекция Характеристика существующих технологий программирования. Классификация языков и систем программирования. История создания и перспективы развития систем программирования. Определение формальных языков. Классификация Н.Хомского. Задачи разбора языков. История и основные концепции платформы NET         [1-5] Экзамен  
Основы построения программ в С#. Классы и интерфейсы.       [1-5] Зачет по лабораторной тработе  
Пространство имен. Наследование и инкапсуляция. Подключение пакетов (using).       [1-5] Экзамен  
Построение консольных приложений. Классы для работы с файлами. Сохранение текста и рисунков.       [1-5] Зачет по лабораторной тработе  
Сериализация объектов.Примеры приложений         Зачетное занятие  
Классы для работы с базами данных. SQL-адаптеры.         Зачет по лабораторной тработе  
Визуализация данных и работа с конструктором баз данных. Навигация по таблицам         Зачет по лабораторной тработе  
Организация клиент-серверного взаимодействия на основе прокола TCP. Взаимодействие через порты.       [2,5]   Зачет по лабораторной работе  
Организация клиент-серверного взаимодействия на основе проколов НTTP.       [2,6]   Зачет по лабораторной работе  
Создание потоков. Реализация серверов и клиентов. Ввод-вывод данных через потоки.       [2,6]   Зачет по лабораторной работе  
Анимация графических образов.       [2,5,6] Экзамен  
Создание собственных компонентов. Создание COM и ACTIVEX-компонентов и включение их в программу.         [1]    
Построение DLL-функций. Работа с библиотеками. Сборки и их реализация.           [1]    
Работа с приложениями ASP.         [1,3,6]    
Создание Web-сервисов.         [1]    
Работа с XML-базами данных. Обработка HTML-форм. .         [1] Экзамен  
Создание баз данных. Форматы данных. Подключение сервера. Создание таблиц и представлений. Редактор запросов       [1,3] Зачет по лабораторной работе  
Создание таблиц и представлений. Редактор запросов.       [3] лабораторной работе  
Установление соединений. Выполнение SQL-запросов. Параметризованные запросы.       [1]    
Запросы на выполнение хранимых процедур.       [1]    
Примеры рабочих приложений. Работа с серверами.       [1] Зачет по лабораторной работе  
Визуальные компоненты и их использование: списки, меню, поля редактирования.       [1]   Зачет по лабораторной работе  
Привязка полей таблиц к визуальным компоненам. Навигация по таблицам.       [3] Зачет по лабораторной работе  
Работа с компонентом GRID       [3] Зачет по лабораторной работе  
ИТОГО СЕМЕСТР 8 48 часов  
СЕМЕСТР 9  
Обзор сетевых протоколов. Базовые протоколы. Протоколы Интернет. Доменные сервера. Web-прокси           Экзамен  
Асинхронный и синхронный ввод-вывод.         [2] Экзамен  
Класс TCPClient. Класс TCPListener. Пример приложения.         [2] Зачетное занятие  
Основные понятия протокола UDP. Описание класса UDPClient.         [2] Зачетное занятие  
Реализация файлового сервера. Прием и передача файла         [2] Зачетное занятие  
HTTP-заголовки. HTTPWebRequest, HTTPWebResponse.       [2] Зачетное занятие  
Отсылка данных на сервер. реализация клиента WEBClient.       [2,3] Зачетное занятие  
Спецификация XML-документов. Классы для работы с XML-документами.       [2,3] Зачет по лабораторной работе  
Примеры использования приложений с XML.       [2,3] Зачет по лабораторной работе  
Протокол SMTP. Реализация типичного приложения для отсылки электронной почты.       [2,3] Зачет по лабораторной работе  
Принятие сообщений. POP3 и другие протоколы для работы с почтой.       [2,3] Зачет по лабораторной работе  
Алгоритмические основы криптографии. Алгоритм RSA           Экзамен  
Класс HashAlgorithm. Класс AssymetricAlgorithm. Примеры работы.           Экзамен  
Особенности технологии ASP-NET..       [5] Зачет по лабораторной работе  
Мастер развертывания сценария ASP-NET. Передача параметров скрипту и возврат значений       [1,5] Зачет по лабораторной работе  
Создание страницы AJAX. Описание технологии AJAX       [5] Зачет по лабораторной работе  
Создание WPF-приложения для браузера. Соображения юезопасности и развертывание приложения         [5] Экзамен  
Понятие сервиса и концепция его использования.         Зачет по лабораторной работе  
Создание WEB-сервиса. Примеры.         Зачет по лабораторной работе  
Функциональные возможности Office.           Зачетное занятие  
Работа с Excel, Word, Out Look         Зачетное занятие  
Создание надстройки для Office. Модификация панели задач. Реализация смарт-тегов.         [5] Зачетное занятие  
Компоненты рабочего процесса. Описание визуального конструктора рабочих процессов.       [5] Зачетное занятие  
Описание хоста и клиента для рабочего процесса.           Зачетное занятие  

С ДРУГИМИ ДИСЦИПЛИНАМИ СПЕЦИАЛЬНОСТИ

Теоретический раздел

ТЕОРЕТИЧЕСКИЙ РАЗДЕЛ

Сетевая плата

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

Сетевой адрес компьютера можно узнать в окне DOS:

Ø ipconfig /all

Концетратор

Концентратор (хаб) – это устройство, предназначенное для подключения нескольких компьютеров к сети. Хаб имеет число портов от 4 до 24. Каждый компьютер подключается к собственному порту.

Коммутатор

Коммутатор (switch) разделяет сети на фрагменты. Это иллюстрируется следующей картинкой:

современные системы программироавния - student2.ru

Маршрутизаторы

Маршрутизатор – это устройство, которое соединяет между собой различные подсети. Маршрутизатор хранит таблицу маршрутов с перечнем путей, по которым можно попасть в конкрентные сети. Местную таблицу маршрутов можно увидеть, если в Windows выдать команду

Ø route print

Чтобы увидеть весь маршрут доступа к удаленному хосту просто укажите

Ø tracert www.globalknowledge.com

Базовые протоколы

Сеть Интернет использует протокол IP (Internet Protocol). Этот протокол обеспечтивает связь двух узлов. Каждый узел идентифицируется 32-битным адресом, называемым IP-адресом. Данные в IP-протоколе предваряются заголовком. Заголовок содержит следующие поля:

ÿ Версия – 4 бита

ÿ Длина – 4 бита

ÿ Тип обслуживания – 1 байт

ÿ Общая длина сообщения – 2 байта

ÿ Идентификация – 2 байта (сообщение разбивается на фрагменты. Каждый фрагмент имеет один и тот же идентификатор);

ÿ Флаги – 3 бита (учитывают, фрагментировано ли сообщенрие и является ли этот фрагмент последним).

ÿ Смещение фрагмента – 13 битов

ÿ Время жизни сообщения – 1 байт

ÿ Протокол (тип информации) – 1 байт

ÿ Контрольная сумма – 2 байта

ÿ Адрес источника – 4 байта

ÿ Адрес назначения – 4 байта

ÿ Опции

IP адрес состоит из двух частей – сетевого адреса и адреса узла (хоста). Информация поступает в порт. Портов может быть много – порядка 64 тысяч. Порты используются на транспортном уровне обмена. Используемые порты можно увидеть по команде

Ø netstat –a

Эта команда выдает перечень всех используемых портов.

Протокол TCP (transmission control protocol) используется для передачи сообщений на транспортном уровне – в пределах одной локальной сети. Этот протокол требует, чтобы перед отправкой сообщения было открыто соединение. Серверное приложение пассивно ожидает запросы от клиентов. Клиентское приложение должно выполнить активное открытие соединения и послать запрос серверу. Сообщение протокола TCP имеет следующий формат:

Порт источника – 2 байта

Порт назначения – 2 байта

Номер пакета – 4 байта

Номер подтверждения – 4 байта

Смещение данных – 4 байта (информация о начале пакета данных)

Резерв – 6 байт

Размер приемного буфера – 2 байта

Контрольная сумма

Указатель срочности

Отметим, что ТСР является сравнительно медленным, но надежным протоколом.

Протокол UDP (user datagram protocol) в отличие от ТСР является быстрым протоколом. Однако его надежность при этом не столь высока, как у ТСР. UDP не требует открывать соединение. Данные можно передавать сразу по мере их готовности. Протокол UDP не требует подтверждения приема информации. Главное преимущество UDP – быстрая передача и широковощетельная (групповая) доставка. Сообщние в UDP – формате имеет следующую структуру:

Порт источника – 2 байта

Порт назначения – 2 байта

Длина сообщения – 2 байта

Контрольная сумма – 2 байта

Команда ping address позволяет отправить сообщение ЭВМ с указанным адресом. Пример

Ø ping 212.183.100.193

Ø ftp

ftp > open имя

Ø dir …

Ø get …

Ø bye

утилита >nslookup возвращает IP-адрес по заданному IP-имени.

WEB-proxy

WEB-proxy кэширует web-запросы клиентов. Например, WEB-Proxy может кэшировать web-запросы так, чтобы последующие web-запросы на те же страницы получали ответ не из сервера, а из кеша.

Работа с файлами

При работе в сети важное место уделяется вводу-выводу из файлов. Ниже помещен простой пример такой работы.

using System;

using System.IO;

using System.Text;

class SyncIO

{

public static void Main(String [] args)

{

FileStream syncF=new FileStream (“Demo.txt”, FileMode.OpenOrCreate);

byte [] writeBytes =Encoding.ASCII.GetBytes(“Hello,Friends”);

syncF.Write(writeBytes,0, writeBytes.Length);

byte [] readBuf = new byte[syncF.Length-1];

syncF.Seek(0,SeekOrigin.Begin);

syncF.Read(readBuf, 0,

(Convert.ToInt32(syncF.Length-1));

Console.WriteLine(“The content is:”+

Encoding.ASCII.GetString(readBuf));

}

}

Важный вариант ввода-вывода в файлы представляет асинхронный ввод-вывод. Этот вариант означает, что работа с файлом выполняется параллельно с инициировавшим его процессом. В качестве примера мы приведем следующий.

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

using System.Threading;

namespace async2

{

class Program

{

static FileStream fileStm;

static byte[] readBuf;

static AsyncCallback CallBack;

static void Main(string[] args)

{

CallBack = new AsyncCallback(CallBackFunction);

fileStm = new FileStream(@"e:\CSharpProjects\myfile.txt",

FileMode.Open, FileAccess.Read, FileShare.Read, 64, true);

readBuf = new byte[fileStm.Length];

//call asynchronous reading

fileStm.BeginRead(readBuf, 0, readBuf.Length, CallBack, null);

// father the basic process imitating follows

for (int i = 0; i < 100; i++)

{

if (i % 9 == 0)

{

Console.WriteLine("Executes:"+i.ToString());

Thread.Sleep(10);

}

}

fileStm.Close();

Console.WriteLine("The main process stops");

Console.ReadLine();

}

static void CallBackFunction(IAsyncResult asyncResult)

{

Console.WriteLine("Well Done Fellow-programmer!");

Console.WriteLine(Encoding.ASCII.GetString(readBuf));

}

}

}

Операция асинхронного вывода определяется командой

fileStm = new FileStream(@"e:\CSharpProjects\myfile.txt",

FileMode.Open, FileAccess.Read, FileShare.Read, 64, true);

Именно, ее последним операндом – true. Операнд 64 – задает размер буфера ввода-вывода. После запуска ввода-вывода основно й процесс не тормозится а выполняется цикл:

for (int i = 0; i < 100; i++)

{

if (i % 9 == 0)

{

Console.WriteLine("Executes:"+i.ToString());

Thread.Sleep(10);

}

}

Когда ввод-вывод завершится, управление получит CallBack – функция:

static void CallBackFunction(IAsyncResult asyncResult)

Эта функция выдаст результат чтения (см. скриншот)

современные системы программироавния - student2.ru

Если эту функцию изменить таким образом:

static void CallBackFunction(IAsyncResult asyncResult)

{

Thread.Sleep(100);

Console.WriteLine("Well Done Fellow-programmer!");

Console.WriteLine(Encoding.ASCII.GetString(readBuf));

}

то экран вывода изменится так (объясните, почему?)

современные системы программироавния - student2.ru

ЛЕКЦИЯ 2. СОЗДАНИЕ СЕТЕВЫХ ПРИЛОЖЕНИЙ НА ОСНОВЕ СОКЕТОВ TCP

предыдущая лекция следующая лекция

Список лекций

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

Обычно сокетное приложение строится для приложений типа «клиент-сервер». Простое приложение этого типа помещено ниже. Сначала идет серверная часть, которая имеет следующий вид:

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

using System.Net;

using System.Net.Sockets;

namespace ConsoleApplication1

{

class TCPServer

{

static void Main(string[] args)

{

try

{

IPAddress it = IPAddress.Parse("127.0.0.1");

TcpListener tclis = new TcpListener(it, 5002);

tclis.Start();

TcpClient tccli = tclis.AcceptTcpClient();

NetworkStream stm = tccli.GetStream();

byte[] readBuf =

new byte[256];

stm.Read(readBuf, 0, 256);

Console.WriteLine(Encoding.ASCII.GetString(readBuf));

stm.Close();

Console.ReadLine();

}

catch (Exception e)

{

Console.WriteLine(e.ToString());

Console.ReadLine();

}

}

}

}

Теперь создадим приложение клиента (это отдельное приложение, для которого нужно создать новый проект). Приложение TCP-клиента имеет следующий вид.

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

using System.Net;

using System.Net.Sockets;

namespace TCP_Client

{

class TCPClient

{

static void Main(string[] args)

{

try{

TcpClient cli = new TcpClient();

cli.Connect("localhost", 5002);

NetworkStream stm = cli.GetStream();

byte [] sendbytes =

Encoding.ASCII.GetBytes("Hello, fellow-programmer!!");

stm.Write(sendbytes, 0, sendbytes.Length);

cli.Close();

}

catch(Exception e)

{

Console.WriteLine(e.ToString());

}

}

}

}

Запускаем сначала приложение сервера, а затем – приложение клиента. Окно сервера отобразит переданную от клиента строку (рис.2.1):

современные системы программироавния - student2.ru

Рис.2.1

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

using System;

using System.Collections.Generic;

using System.Text;

using System.Net;

using System.Net.Sockets;

using System.IO;

namespace scanports

{

class myscan

{

static void Main(string[] args)

{

IPAddress addr = IPAddress.Parse("127.0.0.1");

for (int i = 1; i < 81; i++)

{

Console.WriteLine("Checking porrt {0}", i);

try

{

IPEndPoint endp = new IPEndPoint(addr, i);

Socket sk = new Socket(

AddressFamily.InterNetwork,

SocketType.Stream,

ProtocolType.Tcp);

sk.Connect(endp);

Console.WriteLine("Port {0} is opened", i);

}

catch (SocketException se)

{

if (se.ErrorCode != 10061)

Console.WriteLine(se.Message);

}

}

}

}

}

Ниже помещен скриншот, демонстрирующий вывод программы. Видим, что порт 25 (используемый для электронной почты), открыт.

современные системы программироавния - student2.ru

Рис.2.2

Интерес представляет также мультиплексный сервер, т.е. такой сервер, который одновременно может обслуживать несколько клиентов. Реализация подобного сервера иллюстрируется следующим программным листингом.

using System;

using System.Collections.Generic;

using System.Text;

using System.Net;

using System.Threading;

using System.Collections;

using System.IO;

using System.Net.Sockets;

namespace multuserver

{

public class multiserv

{

public TcpClient cliSock;

public void runCli()

{

StreamReader stm = new StreamReader(cliSock.GetStream());

NetworkStream wrtStream = cliSock.GetStream();

string res = stm.ReadLine();

string s = res;

while (1 == 1)

{

res = stm.ReadLine();

if (res.IndexOf("END") >= 0)

{

Console.WriteLine("Cherio!");

break;

}

Console.WriteLine(s + " :" + res);

res += "\r\n";

byte[] dwrt = Encoding.ASCII.GetBytes(res);

wrtStream.Write(dwrt, 0, dwrt.Length);

}

cliSock.Close();

}

}

public class echo

{

const int ECHO_PRT = 8082;

public static int numClients = 0;

public static void Main(string[] args)

{

IPAddress ia = IPAddress.Parse("127.0.0.1");

try

{

TcpListener cliLis = new TcpListener(ia,ECHO_PRT);

cliLis.Start();

while (true)

{

TcpClient cli = cliLis.AcceptTcpClient();

multiserv chl = new multiserv();

chl.cliSock = cli;

Thread cliThread =

new Thread(new ThreadStart(chl.runCli));

cliThread.Start();

}

cliLis.Stop();

}

catch (Exception e)

{ }

}

}

}

Для связи с сервером пишем следующее клиентское приложение:

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

using System.Net;

using System.Net.Sockets;

using System.Collections;

namespace multi_client

{

public class mulCli

{

static void Main(string[] args)

{

Console.Write("Your Name, please:");

string usernm = Console.ReadLine();

Console.WriteLine("Connecting");

try

{

TcpClient cCli =

new TcpClient();

cCli.Connect("localhost", 8082);

StreamReader rdr = new StreamReader(cCli.GetStream());

NetworkStream nws = cCli.GetStream();

string dataToServer = usernm;

dataToServer += "\r\n";

byte[] data = Encoding.ASCII.GetBytes(dataToServer);

nws.Write(data, 0, data.Length);

while (1 == 1)

{

Console.WriteLine("New data, please:");

dataToServer = Console.ReadLine();

dataToServer += "\r\n";

data = Encoding.ASCII.GetBytes(dataToServer);

nws.Write(data, 0, data.Length);

if (dataToServer.IndexOf("END") >= 0)

break;

string returndata;

returndata = rdr.ReadLine();

//byte[] readBuf = new byte[256];

//nws.Read(readBuf,0,readBuf.Length);

// returndata = Encoding.UTF32.GetString(readBuf);

Console.WriteLine("Server answer is:" + returndata);

}

cCli.Close();

}

catch(Exception ex)

{

Console.WriteLine(ex.Message);

Console.ReadLine();

}

}

}

}

Создаем в отдельном проекте сервер, в отдельном – клиентскую часть. Запускаем сначала сервер, затем запускаем клиента. Ниже показан скриншот (рис.2.3), иллюстрирующий диалог между клиентом и сервером.

современные системы программироавния - student2.ru

Рис.2.3

Дадим некоторый комментарий по программам клиента и сервера. Начнем с серверного приложения. Серверное приложение содержит потоковый класс

public class multiserv

{

public TcpClient cliSock;

public void runCli()

{

StreamReader stm = new StreamReader(cliSock.GetStream());

NetworkStream wrtStream = cliSock.GetStream();

string res = stm.ReadLine();

string s = res;

while (1 == 1)

{

res = stm.ReadLine();

if (res.IndexOf("END") >= 0)

{

Console.WriteLine("Cherio!");

break;

}

Console.WriteLine(s + " :" + res);

res += "\r\n";

byte[] dwrt = Encoding.ASCII.GetBytes(res);

wrtStream.Write(dwrt, 0, dwrt.Length);

}

cliSock.Close();

}

}

Единственным методом этого

Наши рекомендации