Описание программы (1061423)
Текст из файла
Московский государственный технический университет имени Н. Э. Баумана.
Факультет “Информатика и системы управления”.
Кафедра “Системы обработки информации и управления”.
| Утверждаю: | |
| Галкин В.А. | "__"_____________2011г. |
Курсовая работа
по курсу
Сетевые технологии
«Программа пересылки файлов»
Описание программы
(вид документа)
бумага А4
(вид носителя)
15
(количество листов)
Вариант 6.
| ИСПОЛНИТЕЛИ: | |
| студенты группы ИУ5-72 | |
| Голиков С.В. | _____________________ |
| Николаев С.К. | _____________________ |
| Чаплыгина А.А | _____________________ |
| "__"_____________2011 г. |
Москва 2011
Оглавление
1. Введение 3
2. Класс mainwindow:window 3
2.1. Переменные 3
2.2. События 3
2.3. Методы 4
3. Листинг 5
-
Введение
Программный продукт написан с использованием технологии Windows Presentation Foundation на языке программирования C#.
Для создания графического интерфейса и взаимодействия с COM-портом использовались стандартные библиотеки и элементы управления. Дополнительные функции, не относящиеся к стандартным, приведены ниже.
2. Класс MainWindow:Window
- класс определяющий главного окна.
2.1. Переменные
-
SynchronizationContext UIContext – контекст синхронизации для обращения из одного потока к элементам другого;
-
bool Conn – состояние соединения;
-
SerialPort ComPort – объект, описывающий COM-порт;
-
Thread RThread – объект, описывающий параллельный поток чтения данных из буфера COM-порта;
-
Thread CThread – объект, описывающий параллельный поток проверки соединения;
-
FileStream SFileStream – файловый поток для чтения;
-
FileStream PFileStream – файловый поток для записи;
-
string SourcePath – путь на передающей ЭВМ к передаваемому файлу;
-
string PurposePath – путь на принимающей ЭВМ для сохранения принимаемого файла;
-
long p – последняя записываемая позиция чтения из файлового потока;
-
bool ZagR – принят заголовок файла;
-
bool InfR – принят файл;
-
bool ZagS – заголовок файла доставлен;
-
bool InfS – файл доставлен;
-
bool Podtv – необходимость подтверждения отправки;
-
int ChisloPovtorov – счетчик подряд идущих ошибок передач.
2.2. События
-
private void Window_Loaded(object sender, RoutedEventArgs e) – событие, возникающее при загрузке окна:
-
object sender – объект, вызывающий событие;
-
RoutedEventArgs e – аргументы для события;
-
private void Window_Closed(object sender, EventArgs e) – событие, возникающее при закрытии окна:
-
object sender – объект, вызывающий событие;
-
RoutedEventArgs e – аргументы для события;
private void button1_Click(object sender, RoutedEventArgs e) – событие, возникающее при нажатии кнопки «Отправить файл»:
-
object sender – объект, вызывающий событие;
-
RoutedEventArgs e – аргументы для события;
private void MenuItemClose_Click(object sender, RoutedEventArgs e) – событие, возникающее при нажатии на кнопку «Закрыть» в меню «Действия»:
-
object sender – объект, вызывающий событие;
-
RoutedEventArgs e – аргументы для события;
private void MenuItemHelpA_Click(object sender, RoutedEventArgs e) – событие, возникающее при нажатии на кнопку «О программе» в меню «Справка»:
-
object sender – объект, вызывающий событие;
-
RoutedEventArgs e – аргументы для события;
private void MenuItemHelpD_Click(object sender, RoutedEventArgs e) событие, возникающее при нажатии на кнопку «Разработка» в меню «Справка»:
-
object sender – объект, вызывающий событие;
-
RoutedEventArgs e – аргументы для события.
2.3. Методы
-
public void Connect() – функция, проверки соединения;
-
public void Read() – функция, чтения информации из COM-порта;
-
void ACK() – функция, отправки положительной квитанции;
-
void NAK() – функция, отправки отрицательной квитанции;
-
void YES() – функция, отправки согласия на прием файла;
-
void NO() – функция, отправки сообщения о несогласии на прием файла;
-
void EOT() – функция, отправки сообщения о завершении передачи;
-
bool? Sohranenie(string Zagolovok) – функция открытия диалога сохранения файла:
-
string Zagolovok – заголовок принимаемого файла;
-
-
byte[] Upakovat(char Type) – функция для формирования неинформационного кадра:
-
char Type – тип кадра;
-
-
byte[] Upakovat(byte[] InfByte, char Type, long Length) – функция для формирования информационного кадра:
-
byte[] InfByte – массив информационных байтов;
-
char Type – тип кадра;
-
long Length – длина информационного поля кадра;
-
byte[] Kodir(byte[] Ish, int k, string PorPolinom) – функция кодирования:
-
byte[] Ish – массив байтов для кодирования;
-
int k – число кодируемых битов;
-
string PorPolinom – порождающий полином;
string VichOstatka(string Delimoe, string PorPolinom) – функция вычисление остатка после деления по модулю 2 двоичного числа на порождающий полином:
-
string Delimoe – делимое;
-
string PorPolinom – порождающий полином;
byte[] Dekodir(string Ish, int k, string PorPolinom) – функция декодирования:
-
string Ish – декодируемая строка;
-
int k – число кодируемых битов;
-
string PorPolinom – порождающий полином;
bool Proverka(string Ish, int k, string PorPolinom) – функция проверки закодированного кадра на наличие ошибок:
-
string Ish – декодируемая строка
-
int k – число кодируемых битов;
-
string PorPolinom – порождающий полином;
3. Листинг
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO;
using System.IO.Ports;
using System.Threading;
using Microsoft.Win32;
namespace Kurs_NetworkTechnology
{
/// <summary>
/// Логика взаимодействия для MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
SynchronizationContext UIContext;
bool Conn = false;
SerialPort ComPort;
Thread RThread;
Thread CThread;
FileStream SFileStream;
FileStream PFileStream;
string SourcePath;
string PurposePath;
long p; //последняя записываемая позиция
bool ZagR = false; //получен заголовок
bool InfR = false; //получение информационной части
bool ZagS = false; //отправлен заголовок
bool InfS = false; //отправка иноформационной части
bool Podtv = false; //необходимо подтверждение
int ChisloPovtorov = 0;
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
button1.IsEnabled = false;
UIContext = SynchronizationContext.Current;
RThread = new Thread(Read);
CThread = new Thread(Connect);
ComPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
ComPort.Handshake = Handshake.None;
ComPort.DtrEnable = true;
ComPort.RtsEnable = false;
ComPort.ReadTimeout = 500;
ComPort.WriteTimeout = 500;
ComPort.Open();
CThread.Start();
RThread.Start();
}
private void Window_Closed(object sender, EventArgs e)
{
Conn = false;
RThread.Abort();
CThread.Abort();
ComPort.Close();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog sourceBrowse = new OpenFileDialog();
sourceBrowse.Multiselect = false;
sourceBrowse.Title = "Выберите передаваемый файл";
bool? BrowseOp = sourceBrowse.ShowDialog();
string FileName;
if (BrowseOp == true)
{
SourcePath = sourceBrowse.FileName;
SFileStream = new FileStream(SourcePath, FileMode.Open, FileAccess.Read);
progressBar1.Maximum = (SFileStream.Length / 50)+1;
progressBar1.Value = 0;
FileName = SourcePath.Substring(SourcePath.LastIndexOf('\\') + 1);
byte[] Zagolovok = new byte[FileName.Count()];
for (int i = 0; i < FileName.Count(); i++)
{
Zagolovok[i] = Convert.ToByte(FileName[i]);
}
byte[] telegram = Kodir(Upakovat(Zagolovok, 'I', Zagolovok.Count()), 4, "1011");
ComPort.RtsEnable = false;
Podtv = true;
ComPort.Write(telegram, 0, telegram.Count());
Thread.Sleep(100);
ComPort.RtsEnable = true;
}
}
public void Connect()
{
while (true)
{
if ((ComPort.DsrHolding == true)&(ZagR==false)&(ZagS==false))
{
Conn = true;
UIContext.Send(d => label2.Content = "Активно", null);
UIContext.Send(d => MenuItem_Send.IsEnabled = true, null);
UIContext.Send(d => button1.IsEnabled = true, null);
}
if ((ComPort.DsrHolding == false) & (ZagR == false) & (ZagS == false))
{
Conn = false;
UIContext.Send(d=>label2.Content = "Отсутствует",null);
UIContext.Send(d => MenuItem_Send.IsEnabled = false, null);
UIContext.Send(d => button1.IsEnabled = false, null);
}
if (((ZagR == true) || (ZagS == true)) & (Conn == false))
{
UIContext.Send(d => progressBar1.Visibility = Visibility.Hidden, null);
UIContext.Send(d => label4.Visibility = Visibility.Hidden, null);
UIContext.Send(d => MenuItem_Action.IsEnabled = true, null);
UIContext.Send(d => button1.IsEnabled = true, null);
MessageBox.Show("Во время передачи возникла ошибка!\nПередача прервана!");
ZagR = false;
InfR = false;
ZagS = false;
InfS = false;
PFileStream.Close();
PFileStream.Dispose();
SFileStream.Close();
SFileStream.Dispose();
}
Thread.Sleep(1000);
}
}
public void Read()
{
while (true)
{
while ((Conn == true) & (ComPort.CtsHolding == true))
{
string mess = "";
string message = "";
string s1 = "";
for (int i = 0; ComPort.BytesToRead > 0; i++)
{
s1 = Convert.ToString(ComPort.ReadByte(), 2);
if (s1.Count() < 8)
{
for (int j = 0; s1.Count() < 8; j++)
{
s1 = "0" + s1;
}
}
message += s1;
Thread.Sleep(30);
}
if (message.Count() > 0)
{
if (Proverka(message, 4, "1011") == true)
{
ChisloPovtorov++;
if (ChisloPovtorov >= 5)
{
UIContext.Send(d => label4.Visibility = Visibility.Hidden, null);
UIContext.Send(d => MenuItem_Action.IsEnabled = true, null);
UIContext.Send(d => button1.IsEnabled = true, null);
MessageBox.Show("Во время передачи возникли ошибки!\nПередача прервана!");
ZagR = false;
InfR = false;
ZagS = false;
InfS = false;
PFileStream.Close();
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















