Пример: Глобальная сеть INTERNET
Я ищу:
На главную  |  Добавить в избранное  

Главная/

Программирование, базы данных. /

Сопряжение факсимильного аппарата с IBM PC

←предыдущая следующая→
... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 

/******** ожидание квитирующего байта **/

      cnt.count = statbuf.st_size  /******** размер файла **/

      sport(PORT,cnt.c[0]); /** передача символа из порта **/

      wait(PORT);

      sport(PORT,cnt.c[1]);

      do {

        ch = getch(fp);

        if(ferror(fp));

          {

        printf("Ошибка чтения выходного файла \n");

        break;

          }

           if(!feof(fp))

            {

              wait(PORT);

              sport(PORT,ch);

            }

     } while(!feof(fp));

       wait(PORT);

    fclose(fp);

     } /******************************* конец send_file ***/

     Функция stat(),используемая в send_file() описана в Bor-

land C++.

     Функция send_file_name(),представленная  ниже,устанавли-

вает  соответствие  между именем принимаемого и передаваемого

файлов.

  void send_file_name(char f)

  {

    printf("Ожидание передачи\n");

      do


                           - 36 -

       {

    sport(PORT,"?");

       } while(!kbhit() && check_stat(PORT)&256);

    if(kbhit())

      {

       getch();

       exit(1);

      }

      wait(PORT); /******* ожидание квитирующего символа **/

      printf ("Передано %s ",f);

    /****************** фактическая передача имени файла **/

      while (*f)

       {

    sport(PORT,*f++);

    wait(PORT); /******* ожидание квитирующего байта **/

       }

    sport(PORT,"\n");/************** символ конца строки **/

    printf("\n");

  }

     Функция send_file_name()  предназначена для решения двух

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

ютеров  путем передачи ему маркера вопроса ("?") и дожидается

ответа от него в виде квитирующего байта (в качестве квитиру-

ющего  байта  используется  точка,но  можно любой другой сим-

вол).Функция wait(), представленная ниже,ожидает квитирования

от  компьютера - приемника,реализующего программное подтверж-

дение связи.

 void wait(int port) /****************** ожидание ответа **/

  {

     if (rport(port) != '.'

    {

    cout <<"Ошибка установления связи \n";

    exit(1);

    }

  }

     Таким образом , при обнаружении ошибки эта функция прек-

ращает свою работу.Однако можно предусмотреть обработку  этой

ситуации.

     Прием файла является прямо  противоположенной  операцией

передачи  файла.Во-первых,функция приема ожидает маркера зап-

роса на получение данных (символ " ?  ").На получение маркера

функция отвечает точкой (сигнал квитирования).После получения

имени файла функция ожидает получения его размера в  байтах.В

конечном  итоге функция начинает чтение файла.После получения

и чтения каждого байта функция посылает компьютеру - источни-

ку  квитирующий  байт.Таким образом она реализует программное

подтверждение связи.Функция rec_file() представлена ниже :

 void rec_file()

  {

    FILE *fp;

    char ch;

    char fname[14];

    struct {

         char c[2];


                           - 37 -

         unsigned int count;

       } cnt;

    get_file_name(fname); /******* получение имени файла **/

    printf("Получен файл %s\n",fname);

    remove(fname);

    if( (fp = fopen(fname,"wb"))== NULL)

    {

     printf("Невозможно открыть файл %s\",fname);

     exit(1);

    }

     /************ получение длины файла  *****************/

     sport(PORT,'.');/********************* квитирование **/

     cnt.c[0] = rport(PORT);

     sport(PORT,'.');/********************* квитирование **/

     cnt.c[1] = rport(PORT);

     sport(PORT,'.');/********************* квитирование **/

     for(;cnt.count;cnt.count--)

      {

       ch = rport();

       putch(ch,fp);

       if(ferror(fp)){printf("Ошибка записи в файл \n");

       exit(1);

      }

      sport(PORT,'.'); /******************* квитирование **/

     fclose(fp);

  }

void get_file_name(char *fp) /**** получение имени файла **/

{

  printf("Ожидание получения файла \n ");

 while(rport(PORT) != '?');

 sport(PORT,'.'); /************************ квитирование **/

 while( ( *f = rport() ) )

   { if(*f != '?')

       { f++;

     sport(PORT,'.'); /**************** квитирование **/

       }

   }

}

           я15.5. Схема сервисной розетки для разъема

                         я1"коммуникации"

     Как уже говорилось выше для передачи данных через после-

довательный  порт  используется 3-х жильный провод и 9-ти или

25-ти штыревой разъем,типа DB9 или DB25.В  технической  доку-

ментации последовательные порты называются COM1,COM2 и.т.д.

     В популярной программе Norton Commander существует  воз-

можность  передачи  файлов от одного компьютера к другому.Для

этого надо соединить кабелем,схема которого представлена  ни-

же,войти  в  панель  Link ,назначить передающий и принимающий

компьютер,а  также  номера  портов.После  команды  установить

связь (link) произойдет тестирование соединения,автоматически

установится скорость обмена и вид контроля.В случае успешного

завершения этой  операции  в одной из панелей появится список


                           - 38 -

файлов и директорий текущего дисковода компьютера  с  которым

была осущественна связь.После этого можно передавать и прини-

мать файлы.

     Схема кабеля для передачи файлов через последовательный

порт.

     ЪДДДДДДДДДДДДДДї                  ЪДДДДДДДДДДДДДДДї

     і передаваемые і                  і принимаемые   і

     і данные       ГДДДДДДДДДДДДДДДДДДґ данные        і

     ГДДДДДДДДДДДДДДґ                  ГДДДДДДДДДДДДДДДґ

     і принимаемые  і                  і передаваемые  і

     і данные       ГДДДДДДДДДДДДДДДДДДґ данные        і

     ГДДДДДДДДДДДДДДґ                  ГДДДДДДДДДДДДДДДґ

     і  Земля       ГДДДДДДДДДДДДДДДДДДґ Земля         і

     АДДДДДДДДДДДДДДЩ                  АДДДДДДДДДДДДДДДЩ

     Схема использования 9-ти штыревого разъема.

  ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДї

  і       Описание сигнала           і No. і

  і                                  і кон.і

  ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДґ           ЪДї

  і Передаваемые данные              і  2  ГДДДДДДДДД> і3і

  ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДґ           ГДґ

  і Принимаемые данные               і  3  ГДДДДДДДДД> і2і

  ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДґ          

←предыдущая следующая→
... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 


Copyright © 2005—2007 «RefStore.Ru»