Министерство образования Российской Федерации
Государственное образовательное учреждение высшего профессионального
образования «Комсомольский - на - Амуре государственный технический университет»
Факультет компьютерных технологий
Кафедра МОП ЭВМ
Лабораторная работа 3
по курсу «Сети и телекоммуникации»
Выполнил студент гр. 1ВТ-1: Бабанаков А.Е.
Преподаватель: Могильников Е. В.
Вариант: 1
2005
Тема: Работа с файловой системой на удаленном компьютере через последовательный порт.
Задание: Два компьютера соединены 0-модемным кабелем через последовательные порты. Написать программу просмотра оглавления текущего каталога (DIR), смены текущего каталога (CD) на другом компьютере и передачи выбранного файла с другого компьютера через последовательный порт с параметрами связи по вариантам.
Номер варианта |
Вид передачи |
Количество стоповых бит |
Контроль четности |
Скорость обмена (бод) |
1 |
по прерыванию |
2 |
По четности |
600 |
Теоретическийматериал.
Для установка параметров передачи была создана функция, в которой в качестве параметров указываются значения параметров связи:
OpenSerial( COM_1,//использование порта СОМ1
SER_BAUD_600,//скорость передачи
SER_STOP_2//кол-во стоповых бит
|SER_BITS_8//кол-во бит в кадре
|SER_PARITY_ODD);//установка контроля чётности
1. Просмотр оглавления текущего каталога(DIR).
void exec_dir(void)
{
struct ffblk ffblk;
int done;
_puts("Directory listing of *.*\r\n");
//заполняем структуру
done = findfirst("*.*", &ffblk, FA_DIREC);
while (!done) {
char scratch[80];
//если каталог
if (ffblk.ff_attrib & FA_DIREC)
{
sprintf(scratch, " %-12s <DIR>\r\n", ffblk.ff_name);
}
//если файл
else
{
sprintf(scratch, " %-12s %d\r\n", ffblk.ff_name, ffblk.ff_fsize);
}
_puts(scratch);
done = findnext(&ffblk);
}
}
2. Смена текущего каталога(CD).
void exec_cd(char * d)
{
char buf[128];
if (d != NULL) chdir(d);
//функция смены текущего каталога
getcwd(buf, 128);
_puts(buf);
_puts("\r\n");
}
3. Копирование выбранного каталога.
void exec_copy(char *k)
{
char * fname;
char *a="File Name:";
char *b="File Date:";
int i;
FILE * inf;
strcpy(fname,k);
inf = fopen(fname, "rb");
printf("Transfering filename...\n");
for (i = 0; a[i]; i++) WriteSer(a[i]);
_puts("\r\n");
for (i = 0; fname[i]; i++) WriteSer(fname[i]);
_puts("\r\n");
for (i = 0; b[i]; i++) WriteSer(b[i]);
_puts("\r\n");
WriteSer(0);
//transfer file data
printf("Transfering file data...\n");
while (1) {
int c = fgetc(inf);
if (feof(inf)) break;
switch(c) {
case 0xC0 : WriteSer(0xDB); WriteSer(0xDC); break;
case 0xDB : WriteSer(0xDB); WriteSer(0xDD); break;
default : WriteSer(c); break;
}
}
printf("Sending EOF...\n");
WriteSer(0xC0);
CloseSerial();
fclose(inf);
}
Листингпрограммы.
Листинг клиентской программы:
#include <conio.h>
#include <stdio.h>
#include <dir.h>
#include <string.h>
#include <dos.h>
#include "comm.cc" //Include shared module
/* We use this to receive a string from serial link */
char * _gets(char * s)
{
int c;
int do_some_job = 1;
char * t = s;
while (do_some_job) {
while (DataReadyCount() == 0);
c = ReadQueue();
putch(c);
switch(c) {
case 13 : //If enter - finish input
putch(10);
*t++ = '\0';
do_some_job = 0;
break;
case 8 : // This is a backspace - remove last character
if (t != s) t--;
break;
default :
*t++ = c;
}
}
return s;
}
/* We use this function to output a string to serial console */
void _puts(char * s)
{
while (*s) {
putch(*s);
WriteSer(*s++);
}
}
void exec_copy(char *k)
{
char * fname;
char *a="File Name:";
char *b="File Date:";
int i;
FILE * inf;
strcpy(fname,k);
inf = fopen(fname, "rb");
printf("Transfering filename...\n");
for (i = 0; a[i]; i++) WriteSer(a[i]);
_puts("\r\n");
for (i = 0; fname[i]; i++) WriteSer(fname[i]);
_puts("\r\n");
for (i = 0; b[i]; i++) WriteSer(b[i]);
_puts("\r\n");
WriteSer(0);
//transfer file data
printf("Transfering file data...\n");
while (1) {
int c = fgetc(inf);
if (feof(inf)) break;
switch(c) {
case 0xC0 : WriteSer(0xDB); WriteSer(0xDC); break;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.