Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Интернет » Операционная система UNIX - Робачевский Андрей Михайлович
<< На главную

Операционная система UNIX - Робачевский Андрей Михайлович

Читать онлайн Операционная система UNIX - Робачевский Андрей Михайлович

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 132 133 134 135 136 137 138 139 140 ... 156
Перейти на страницу:

 req.addr.maxlen = sizeof(serv_addr);

 req.addr.len = sizeof(serv_addr);

 req.addr.buf = (char*)&amp;serv_addr;

 /* Максимальное число запросов, ожидающих обработки,

    установим равным 5 */

 req.qlen = 5;

 /* Свяжем узел с запросом */

 if (t_bind(tn, &amp;req, (struct t_bind*)0) &lt; 0) {

  t_error(&quot;Ошибка вызова t_bind();

  exit(1);

 }

 fprintf(stderr, &quot;Адрес сервера: %sn&quot;,

  inet_ntoa(serv_addr.sin_addr));

 /* Поскольку в структуре t_call нам понадобится только буфер

    для хранения адреса клиента, разместим ее динамически */

 if ((call =

  (struct t_call*)t_alloc(tn, T_CALL, T_ADDR)) == NULL) {

  t_error(&quot;Ошибка вызова t_alloc()&quot;);

  exit(2);

 }

 call-&gt;addr.maxlen = sizeof(serv_addr);

 call-&gt;addr.len = sizeof(srv_addr);

 call-&gt;opt.len = 0;

 call-&gt;update.len = 0;

 /* Бесконечный цикл получения и обработки запросов */

 while (1) {

  /* Ждем поступления запроса на установление соединения */

  if (t_listen(s, call) &lt; 0) {

   t_error(&quot;Ошибка вызова t_listen()&quot;);

   exit(1);

  }

  /* Выведем информацию о клиенте, сделавшем запрос */

  clnt_addr = (struct sockaddr_in*)call-&gt;addr.buf;

  printf(&quot;Клиент: %sn&quot;, inet_ntoa(clnt_addr-&gt;sin_addr));

  /* Создадим транспортный узел для обслуживания запроса */

  if (ntn = t_open(&quot;/dev/tcp&quot;, O_RDWR, (struct t_info*)0)) &lt; 0) {

   t_error(&quot;Ошибка вызова t_open()&quot;);

   exit(1);

  }

  /* Пусть система сама свяжет его с подходящим адресом */

  if (t_bind(ntn, (struct t_bind*)0), (struct t_bind*)0) &lt; 0) {

   t_error(&quot;Ошибка вызова t_accept()&quot;);

   exit(1);

  }

  /* Примем запрос и переведем его обслуживание на новый

     транспортный узел */

  if (t_accept(tn, ntn, call) &lt; 0) {

   t_error(&quot;Ошибка вызова t_accept()&quot;);

   exit(1);

  }

  /* Создадим новый процесс для обслуживания запроса.

     При этом родительский процесс продолжает принимать

     запросы от клиентов */

  if ((pid = fork()) == -1) {

   t_error(&quot;Ошибка вызова fork()&quot;);

   exit(1);

  }

  if (pid == 0) {

   int nbytes;

   /* Дочерний процесс: этот транспортный узел уже не нужен,

      он используется родителем */

   close(tn);

   while ((nbytes = t_rcv(ntn, buf,

    sizeof(buf), &amp;flags)) != 0) {

    t_snd(ntn, buf, sizeof(buf), 0);

   }

   t_close(ntn);

   exit(0);

  }

  /* Родительский процесс: этот транспортный узел не нужен,

     он используется дочерним процессом для обмена данными

     с клиентом */

  t_close(ntn);

 }

 t_close(ntn);

}

Клиент

#include &lt;sys/types.h&gt;

#include &lt;sys/socket.h&gt;

#include &lt;tiuser.h&gt;

#include &lt;netinet/in.h&gt;

#include &lt;arpa/inet.h&gt;

#include &lt;stdio.h&gt;

#include &lt;fcntl.h&gt;

#include &lt;netdb.h&gt;

#define PORTNUM 1500

main(argc, argv)

char *argv[];

int argc;

{

 int tn;

 int flags;

 struct sockaddr_in serv_addr;

 struct hostent *hp;

 char buf[80]=&quot;Здравствуй, мир!&quot;;

 struct t_call* call;

 /* В качестве аргумента клиенту передается доменное имя хоста,

    на котором запущен сервер. Произведем трансляцию доменного

    имени в адрес */

 if ((hp = gethostbyname(argv[1])) == 0) {

1 ... 132 133 134 135 136 137 138 139 140 ... 156
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Операционная система UNIX - Робачевский Андрей Михайлович бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга