66497

Механизмы сетевого взаимодействия

Лабораторная работа

Информатика, кибернетика и программирование

Цель работы – изучить программный интерфейс сетевых сокетов, получить навыки организации взаимодействия программ при помощи протоколов Internet и разработки прикладных сетевых сервисов.

Русский

2014-08-22

39.5 KB

1 чел.

Министерство образования и науки Российской Федерации

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

Кафедра «Информационная безопасность компьютерных систем»

ЛАБОРАТОРНАЯ РАБОТА № 8

Механизмы сетевого взаимодействия

по дисциплине «Операционные системы»

Выполнил

студент гр. 2088/1  А.С. Никитин

 <подпись>

Руководитель

 Т.В. Степанова

 <подпись>

Санкт-Петербург

2011

1. Формулировка задания

Цель работы – изучить программный интерфейс сетевых сокетов, получить навыки организации взаимодействия программ при помощи протоколов Internet и разработки прикладных сетевых сервисов.

2. Использованные теоретические сведения

3. Результаты работы

3.1. Выполнение индивидуального задания

Разработать на языке C программу transport, демонстрирующую использование основных функций работы с сокетами UNIX. Программа должна порождать четыре процесса — клиент общается с сервером, который является клиентом для двух других серверов, которые выполняют однонаправленную передачу данных между собой через TCP cокеты,  относящиеся к локальному сетевому интерфейсу lo.

При помощи программы transport оценить скорость передачи данных через стек протоколов TCP/IP при использовании протокола TCP.
#include <sys/types.h>

#include <sys/socket.h>

#include <linux/in.h>

#include <unistd.h>

#include <stdlib.h>

#include <stdio.h>

#include <assert.h>

#include <time.h>

#define BUFSIZE    32

#define TIMES      1048576

#define IP         "127.0.0.1"

#define PORT_C_CS  12124

#define PORT_CS_S1 12235

#define PORT_CS_S2 13151

int server2() {

   int fdsocket, fdnsocket, bcount, i;

   char buffer[BUFSIZE];

   struct sockaddr_in ssocket, csocket;

   long int t;

   double s;

   assert((fdsocket = socket(AF_INET, SOCK_STREAM, 0)) >= 0);

   ssocket.sin_family = AF_INET;

   ssocket.sin_port = htons(PORT_CS_S2);

   ssocket.sin_addr.s_addr = htonl(INADDR_ANY);

   assert(bind(fdsocket, (struct sockaddr *) &ssocket, sizeof(ssocket)) >= 0);

   assert(listen(fdsocket, 16) >= 0);

   bcount = sizeof(csocket);

   assert((fdnsocket = accept(fdsocket, (struct sockaddr *) &csocket, &bcount)) >= 0);

   t = clock();

   for (i = 0; i < TIMES; i++) read(fdnsocket, buffer, BUFSIZE);

   t = clock() - t;

   s = (double) t / (double) CLOCKS_PER_SEC;

   printf("S2: C to S2 speed: %lf\n", (double) BUFSIZE / s);

   close(fdnsocket);

   close(fdsocket);

   return 0;

}

int server1() {

   int fdsocket, fdnsocket, bcount, i;

   char buffer[BUFSIZE];

   struct sockaddr_in ssocket, csocket;

   long int t;

   double s;

   assert((fdsocket = socket(AF_INET, SOCK_STREAM, 0)) >= 0);

   ssocket.sin_family = AF_INET;

   ssocket.sin_port = htons(PORT_CS_S1);

   ssocket.sin_addr.s_addr = htonl(INADDR_ANY);

   assert(bind(fdsocket, (struct sockaddr *) &ssocket, sizeof(ssocket)) >= 0);

   assert(listen(fdsocket, 16) >= 0);

   bcount = sizeof(csocket);

   assert((fdnsocket = accept(fdsocket, (struct sockaddr *) &csocket, &bcount)) >= 0);

   t = clock();

   for (i = 0; i < TIMES; i++) read(fdnsocket, buffer, BUFSIZE);

   t = clock() - t;

   s = (double) t / (double) CLOCKS_PER_SEC;

   printf("S1: C to S1 speed: %lf\n", (double) BUFSIZE / s);

   close(fdnsocket);

   close(fdsocket);

   return 0;

}

int clientserver() {

   int fdsocket, fds1socket, fds2socket, fdcsocket, bcount, i;

   char buffer[BUFSIZE];

   struct sockaddr_in ssocket, s1socket, s2socket, csocket;

   long int t;

   double s;

   assert((fds1socket = socket(AF_INET, SOCK_STREAM, 0)) >= 0);

   s1socket.sin_family = AF_INET;

   s1socket.sin_port = htons(PORT_CS_S1);

   inet_aton(IP, &s1socket.sin_addr);

   assert((fds2socket = socket(AF_INET, SOCK_STREAM, 0)) >= 0);

   s2socket.sin_family = AF_INET;

   s2socket.sin_port = htons(PORT_CS_S2);

   inet_aton(IP, &s2socket.sin_addr);

   assert((fdsocket = socket(AF_INET, SOCK_STREAM, 0)) >= 0);

   ssocket.sin_family = AF_INET;

   ssocket.sin_port = htons(PORT_C_CS);

   ssocket.sin_addr.s_addr = htonl(INADDR_ANY);

   assert(bind(fdsocket, (struct sockaddr *) &ssocket, sizeof(ssocket)) >= 0);

   assert(listen(fdsocket, 16) >= 0);

   bcount = sizeof(csocket);

   while (connect(fds1socket, (struct sockaddr *) &s1socket, sizeof(s1socket)) < 0);

   while (connect(fds2socket, (struct sockaddr *) &s2socket, sizeof(s2socket)) < 0);

   assert((fdcsocket = accept(fdsocket, (struct sockaddr *) &csocket, &bcount)) >= 0);

   t = clock();

   for (i = 0; i < TIMES; i++) {

       read(fdcsocket, buffer, BUFSIZE);

       write(fds1socket, buffer, BUFSIZE);

       write(fds2socket, buffer, BUFSIZE);

   }

   t = clock() - t;

   s = (double) t / (double) CLOCKS_PER_SEC;

   printf("CS: CS speed: %lf\n", (double) (BUFSIZE * 3) / s);

   close(fds1socket);

   close(fds2socket);

   close(fdcsocket);

   close(fdsocket);

   return 0;

}

int client() {

   int fdsocket, bcount, i;

   char buffer[BUFSIZE];

   struct sockaddr_in ssocket;

   assert((fdsocket = socket(AF_INET, SOCK_STREAM, 0)) >= 0);

   ssocket.sin_family = AF_INET;

   ssocket.sin_port = htons(PORT_C_CS);

   inet_aton(IP, &ssocket.sin_addr);

   while (connect(fdsocket, (struct sockaddr *) &ssocket, sizeof(ssocket)) < 0);

   for (i = 0; i < TIMES; i++) write(fdsocket, buffer, BUFSIZE);

   close(fdsocket);

   return 0;

}

int main() {

   int pcl;

   if (pcl = fork()) {

       client();

       wait(pcl);

       return 0;

   }

   if (pcl = fork()) {

       clientserver();

       wait(pcl);

       return 0;

   }

   if (pcl = fork()) {

       server1();

       wait(pcl);

       return 0;

   }

   server2();

   return 0;

}

4. Выводы

Сетевые сокеты предоставляют удобный интерфейс взаимодействия программ, находящихся как на одном компьютере, так и на разных, при условии нахождения их в одной сети.


Приложение

Исходные тексты программ


 

А также другие работы, которые могут Вас заинтересовать

1779. ПРАГМАТИЧЕСКИЙ АСПЕКТ ПЕРЕВОДОВ АНТИЧНЫХ АВТОРОВ. на материале ранних английских переводов латинского сочинения Боэция Об утешении философией 1.37 MB
  Лингвистическая прагматика в парадигме языкознания и теории перевода. Лингвокультурологический аспект английских переводов античных латинских текстов. Прагматический аспект ранних английских переводов латинского сочинения Боэция Об утешении философией. Перевод как особый вид литературного творчества эпохи английского Ренессанса.
1780. Совершенствование экспрессных методов индикации микобактерий туберкулеза 1.36 MB
  Анализ эпидемиологической обстановки по туберкулёзу и современного состояния экспресс-диагностики его возбудителя. Носители иммобилизованных систем твёрдофазного иммуноанализа. Питательные среды, условия культивирования микроорганизмов. Получение и контроль иммунофлуоресцирующих конъюгатов. Характеристика реагентов, используемых для получения магноиммуносорбентов. Биотехнология изготовления латексного диагностикума.
1781. ПРОБЛЕМЫ ИНТЕЛЛИГЕНЦИИ В РУССКОЙ ПУБЛИЦИСТИКЕ 1909 - 1912 ГГ. (ПОЛЕМИКА ВОКРУГ СБОРНИКА 1.36 MB
  ПОЛЕМИКА ОБ ИНТЕЛЛИГЕНЦИИ КАК ЯВЛЕНИЕ ОБЩЕСТВЕННОЙ ЖИЗНИ 1909-1912 ГГ. ПОДХОД УЧАСТНИКОВ ПОЛЕМИКИ К ПРОБЛЕМАМ РУССКОЙ ИНТЕЛЛИГЕНЦИИ (СОДЕРЖАТЕЛЬНАЯ СТОРОНА ПОЛЕМИКИ). ПРАВЫЕ КОНСТИТУЦИОНАЛИСТЫ И СОЦИАЛЬНЫЕ ХРИСТИАНЕ (ВЕХОВЦЫ).
1782. ФУНДАМЕНТАЛЬНЫЙ АНАЛИЗ МИРОВЫХ ВАЛЮТНЫХ РЫНКОВ 1.36 MB
  Для чего необходимо изучать фундаментальный анализ. Индексные методы измерения экономических процессов. Основные положения количественной теории денег. Показатели роста экономики, валовой внутренний продукт. Фундаментальные данные, психология рынка и принятие решений. Продажи грузовых и легковых автомобилей. Заказы на товары длительного пользования.
1783. ОСОБЕННОСТИ ОРГАНИЗАЦИИ ВОСПИТАТЕЛЬНОЙ РАБОТЫ ШКОЛЫ С ДЕТЬМИ ИЗ СЕМЕЙ ВОЕННОСЛУЖАЩИХ, ПРОЖИВАЮЩИХ В УСЛОВИЯХ ВОЕННОГО ГАРНИЗОНА 1.35 MB
  Теоретические основы воспитания детей военнослужащих в условиях военного гарнизона. Содержание и структура системы взаимодействия семьи и школы в воспитании детей военнослужащих. Организация и методика эксперимента по воспитательной работе школы с детьми из семей военнослужащих. Сравнительный анализ эффективности результатов внедрения экспериментальной программы воспитательной работы школы.
1784. ПОЛИТИКО-ИДЕОЛОГИЧЕСКИЕ ФАКТОРЫ ЭВОЛЮЦИИ ГРУЗИНО-ОСЕТИНСКОГО КОНФЛИКТА 1.35 MB
  Теоретические и идеологические аспекты изучения грузино-осетинского конфликта. Объективные противоречия в грузино-осетинских отношениях как предпосылка развертывания конфликта. Политико-идеологические противоречия в контексте эволюции грузино-осетинского конфликта. Внутриполитическая борьба и её роль в эволюции конфликтных отношений.
1785. Основы биржевой торговли 1.35 MB
  Миф об интеллекте. Метод сближения или расхождения показателя среднего движения курса (MACD) и MACD-гистограмма. Индекс нового максимума и нового минимума. Индикатор игрока и другие индикаторы рынка ценных бумаг. Игра в диапазоне цен.
1786. Двухфазные ветры в двойных системах 1.35 MB
  Общая картина взаимодействия двухкомпонентных ветров, формирование спектра излучения за фронтом ударной волны, модель излучения WR 140 в рентгеновском диапазоне, кривая блеска в рентгеновском диапазоне, данные наблюдений и основные представления.
1787. ВЛИЯНИЕ ОБРАЗОВАНИЯ В СФЕРЕ ФИЗИЧЕСКОЙ КУЛЬТУРЫ НА ФОРМИРОВАНИЕ ПРОФЕССИОНАЛЬНО ВАЖНЫХ КАЧЕСТВ КУРСАНТОВ ВОЕННОГО ВУЗА 1.34 MB
  Целью исследования явилась разработка образовательной программы и соответствующей педагогической технологии, обеспечивающих физкультурное образование курсантов.