Листинг программы (1061443)
Текст из файла
Московский государственный технический университет им. Н.Э.Баумана
_________________________________________________________________
Утверждаю: | |
Галкин В.А. | "__"_____________2011 г. |
Курсовая работа по курсу «Сетевые технологии»
«Локальная безадаптерная сеть»
Листинг программы
(вид документа)
писчая бумага
(вид носителя)
31
(количество листов)
ИСПОЛНИТЕЛИ: | |
студенты группы ИУ5-74 | |
Чаев В.А. Новосельцев А.Б. Табаков И.К. | _____________________ _____________________ _____________________ "__"_____________2011 г. |
Москва - 2011
________________________________________________________________
Содержание
Interface.cpp 3
Intrface.h 20
Interface1.cpp 21
Comport.h 22
Channel.h 29
Interface.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "interface.h"
#include "interface4.h"
#include "channel.h"
#define MaxErr 5
//#include <dir.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void TForm1::addToConsole(AnsiString Mess)
{
Form1->console->Lines->Add(Mess);
}
//---------------------------------------------------------------------------
void TForm1::setProgressBar(int pos)
{
Form1->ProgressBar1->Position=pos;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::QuitProgClick(TObject *Sender)
{
if (cpComPort.IsOpened()) cpComPort.CloseComPort();
Form1->Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
fCurrentFile="";
StationType = 0;
AttemptToConnect=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
bool IsOpened=cpComPort.IsOpened();
if(ComboBox1->Text!="Выберите порт")
{
cpComPort.SetParams(ComboBox1->Text,512,9600);
bool flagOpen=cpComPort.OpenCom();
if (!flagOpen)
{
addToConsole(cpComPort.asError); // Ошибка при открытии порта
return;
}
if(IsOpened && cpComPort.IsOpened())addToConsole("Соединение закрыто");
addToConsole("Порт подключен");
addToConsole(" Используемый порт: "+ComboBox1->Text);
addToConsole(" Размер блока данных: 512");
addToConsole(" Скорость передачи: 9600");
setProgressBar(0);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
Edit1->Text = OpenDialog1->FileName;
AnsiString fCurFile = OpenDialog1->FileName;
addToConsole("Выбран файл: "+fCurFile);
setCurrentFile(fCurFile);
}
if(cpComPort.IsOpened())Button2->Enabled=true;
}
//============================================================================//
//Передача файла от ведущей станции ведомой
void TForm1:: SendFileMS(void)
{
bSendingFileFlag = true;
BlockSize = 512;
if(FileExists(Edit1->Text) && cpComPort.IsOpened())
{
if (getCurrentFile().IsEmpty())
{
addToConsole(_ERRT10); // Файл для передачи не выбран
bSendingFileFlag = false;
return;
}
// Открытие передаваемого файла
int iFileHandler=FileOpen(getCurrentFile(), fmOpenRead);
if (iFileHandler==-1)
{
addToConsole(_ERRT11); // Ошибка при открытии файла
setCurrentFile("");
bSendingFileFlag = false;
return;
}
// Настройка классов
SendFile sfSend(cpComPort.GetComHandle()); //создание лог. канала sfsend с дескриптором от порта
ACK_NAK anCheck(cpComPort.GetComHandle()); //создание лог. канала anCheck с дескриптором от порта
// Подтверждение возобновления соединения
anCheck.SendGive();
char cAND=anCheck.ReceiveACK(100);
if (cAND!='T')
{
if (cAND=='D')
{
addToConsole(_ERRT16);
addToConsole(_ERRT17); // Разрыв соединения
}
else addToConsole(_ERRT15); // Ошибка при установлении соединения
FileClose(iFileHandler);
cpComPort.CloseComPort();
ComboBox1->Text="Выберите порт";
bSendingFileFlag = false;
EndWD();
return;
}
// *** Передача файла *** //
int iFileLength=FileSeek(iFileHandler, 0, 2); // Определение размера файла
// Выделение имени файла и расширения из fCurrentFile
char file[MAXFILE];
char ext[MAXEXT];
fnsplit(fCurrentFile.c_str(),NULL,NULL,file,ext);
AnsiString asFileName(file);
asFileName=asFileName+ext; // Имя файла и расширение
// Передача длины имени файла
int FNLength=asFileName.Length();
sfSend.Send(&FNLength, 4);
cAND=anCheck.ReceiveACK(5);
if (cAND=='D') // Разрыв соединения
{
addToConsole(_ERRT17);
FileClose(iFileHandler);
cpComPort.CloseComPort();
ComboBox1->Text="Выберите порт";
bSendingFileFlag = false;
EndWD();
return;
}
// Передача имени файла
char* pcbuf=asFileName.c_str();
sfSend.Send(pcbuf, asFileName.Length());
cAND=anCheck.ReceiveACK(5);
if (cAND=='D') // Разрыв соединения
{
addToConsole(_ERRT17);
FileClose(iFileHandler);
cpComPort.CloseComPort();
ComboBox1->Text="Выберите порт";
bSendingFileFlag = false;
EndWD();
return;
}
// Передача длины файла
sfSend.Send(&iFileLength, 4);
cAND=anCheck.ReceiveACK(5);
if (cAND=='D') // Разрыв соединения
{
addToConsole(_ERRT17);
FileClose(iFileHandler);
cpComPort.CloseComPort();
ComboBox1->Text="Выберите порт";
bSendingFileFlag = false;
EndWD();
return;
}
cAND=anCheck.ReceiveACK(5);
if (cAND!='T') // Открытие файла на принимающей стороне
{
if (cAND=='D') addToConsole(_ERRT17); // Разрыв соединения
else addToConsole(_ERRT14); // Ошибка на принимающей стороне
FileClose(iFileHandler);
cpComPort.CloseComPort();
ComboBox1->Text="Выберите порт";
bSendingFileFlag = false;
FileClose(iFileHandler);
EndWD();
return;
}
// Передача файла в порт по блокам
FileSeek(iFileHandler, 0, 0);
int iCurPos=0; //текущая позиция в файле
int iOldPos=0; //старая позиция в файле
int iCount=0; //счетчик закодированных байт
int iUncodSize=cpComPort.GetBlockSize()/2 - 1;
short * usCodBuf=new short[iUncodSize+1]; //массив двубайтных закодированных символов
char * cUncodBuf=new char[iUncodSize]; //массив однобайтных принимаемых символов
// Параметры для ProgressBar
int iBarPos=0;
int iBarDelta;
if (iFileLength%iUncodSize)
iBarDelta=((1000*iUncodSize)/(iFileLength+iUncodSize))+1;
else
iBarDelta=(1000*iUncodSize)/iFileLength;
setProgressBar(0);
char cUncod;
while (iCurPos<iFileLength)
{
iOldPos = iCurPos;
if ((iFileLength-iCurPos) > iUncodSize)
{
FileSeek(iFileHandler, iCurPos, 0);
FileRead(iFileHandler, cUncodBuf, iUncodSize);
usCodBuf[0] = 0x49FF;
for (iCount=0; iCount<iUncodSize; iCount++)
usCodBuf[iCount+1]=EncodeByte(cUncodBuf[iCount]);
iCurPos+=iUncodSize;
} // endif
else
{
FileSeek(iFileHandler, iCurPos, 0);
FileRead(iFileHandler, cUncodBuf, iFileLength-iCurPos);
usCodBuf[0] = 0x4900 + (iFileLength - iCurPos);
for (iCount=0; iCurPos<iFileLength; iCount++, iCurPos++)
usCodBuf[iCount+1]=EncodeByte(cUncodBuf[iCount]);
} // endelse
// Передача блока из буфера в порт
sfSend.Send(usCodBuf, BlockSize);
// Ожидание и получение квитанции о доставке
cAND=anCheck.ReceiveACK(5);
if (cAND!='T') // Разрыв соединения или ошибка приема
{
if (cAND=='D')
{
addToConsole(_ERRT17); // Разрыв соединения
FileClose(iFileHandler);
cpComPort.CloseComPort();
ComboBox1->Text="Выберите порт";
bSendingFileFlag = false;
EndWD();
return;
}
else
{
iCurPos = iOldPos;
addToConsole(_ERRT21);
}
}
// Установка ProgressBar
if (cAND=='T')
{
if ((iBarPos+=iBarDelta)>1000) iBarPos=1000;
setProgressBar(iBarPos);
}
} // endwhile
// Файл передан
addToConsole("Файл "+fCurrentFile+" передан");
setProgressBar(1000);
// Закрытие файла
FileClose(iFileHandler);
setCurrentFile("");
// Завершение соединения
bSendingFileFlag = false;
cpComPort.CloseComPort();
ComboBox1->Text="Выберите порт";
addToConsole("Соединение завершено");
EndWD();
}
}
//============================================================================//
//Получение файла от ведомой станции ведущей
void TForm1:: ReceiveFileMS(void)
{
bRecievingFileFlag = true;
addToConsole("Поиск файла: "+getCurrentFile());
BlockSize = 512;
if (getCurrentFile().IsEmpty())
{
addToConsole(_ERRT10); // Файл для передачи не выбран
bSendingFileFlag = false;
return;
}
// Настройка классов
SendFile sfSend(cpComPort.GetComHandle());
ACK_NAK anResp(cpComPort.GetComHandle());
// Подтверждение возобновления соединения
anResp.SendTake();
char cAND=anResp.ReceiveACK(100);
if (cAND!='T')
{
if (cAND=='D')
{
addToConsole(_ERRT16);
addToConsole(_ERRT17); // Разрыв соединения
}
else addToConsole(_ERRT15); // Ошибка при установлении соединения
cpComPort.CloseComPort();
ComboBox1->Text="Выберите порт";
bSendingFileFlag = false;
EndWD();
return;
}
// Выделение имени файла и расширения из fCurrentFile
char file[MAXFILE];
char ext[MAXEXT];
fnsplit(fCurrentFile.c_str(),NULL,NULL,file,ext);
AnsiString asFileName(file);
asFileName=asFileName+ext; // Имя файла и расширение
// Передача длины имени файла
int FNLength=fCurrentFile.Length();
sfSend.Send(&FNLength, 4);
cAND=anResp.ReceiveACK(5);
if (cAND=='D') // Разрыв соединения
{
addToConsole(_ERRT17);
cpComPort.CloseComPort();
ComboBox1->Text="Выберите порт";
bSendingFileFlag = false;
EndWD();
return;
}
// Передача полного пути файла
char* pcbuf=fCurrentFile.c_str();
sfSend.Send(pcbuf, fCurrentFile.Length());
cAND=anResp.ReceiveACK(5);
if (cAND!='T')
{
if (cAND=='D') addToConsole(_ERRT17);
else addToConsole(_ERRT24);
cpComPort.CloseComPort();
ComboBox1->Text="Выберите порт";
bSendingFileFlag = false;
EndWD();
return;
}
ReceiveFile rfReceive(cpComPort.GetComHandle());
/**************************стандартно***********************************/
// Получение длины файла
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.