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. Выводы

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


Приложение

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


 

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

71856. Проект рабочей площадки 1.72 MB
  В курсовом проекте рассмотрены один вариант нормального и два варианта усложненного типа балочной клетки. Временная нагрузка на настил: p н = 30 кН/м2; Коэффициент надежности по нагрузке: f.р.=1,2; Коэффициент надежности по нагрузке для собственного веса конструкций: f.g.=1,05...
71857. Расчет рабочей площадки 6.7 MB
  Сбор нагрузок. Определение расчетных усилий в сечениях балки. Назначение высоты сечения балки. Назначаем высоту стенки hw = 1500 мм. Назначение размеров сечения стенки. Определение размеров сечения поясов.
71858. Один вариант усложненного и два варианта нормального типа балочной клетки 1.26 MB
  Сбор нагрузок Определение расчетных усилий в сечениях балки Назначение высоты сечения балки. Назначение размеров сечения стенки Определение размеров сечения поясов Изменение сечения полки Расчет поясных швов Проверка местной устойчивости элементов балки...
71859. Творчество Т. Гейнсборо 16.01 KB
  В первую очередь Гейнсборо интересовали пейзажи. Гейнсборо всегда считал себя пейзажистом но пейзажи не приносили дохода так как не были популярны. Около 1749 года Гейнсборо создаёт произведение в котором он впервые соединяет портрет и пейзаж портрет четы Эндрюс.
71860. Творчество У. Хогарта 14.43 KB
  Многие свои произведения художник испытавший на себе влияние идей философов Просвещения подчинил задаче воспитания с помощью художественного творчества нравственного начала в человеке и искоренения пороков. В 1764 году художник выпустил свою последнюю гравюру Конец или Бездна.
71861. Творчество Ж.-Б. Грёза 14.49 KB
  В жанре семейного быта с его драмами у Грёза совсем немного соперников во французской живописи. Картины Грёза были гравированы лучшими мастерами среди которых Леба Флипар и Массаротец. В 1868 году на родине Грёза в Тюрню ему воздвигнут памятник.
71862. Творчество Ж.О. Фрагонара 13.76 KB
  В больших исторических картинах Фрагонара мало оригинальности; в его пейзажах природа является слишком переиначенной и приукрашенной; зато жанровые его картины хотя и не чуждые манерности пленяют зрителя умно изобретённой композицией грациозностью рисунка изящностью...
71863. Творчество Ф. Буше 17.31 KB
  Творчество Буше живописца исключительно многогранно он обращался каллегорическим и мифологическим сюжетам изображал деревенские ярмарки и фешенебельную парижскую жизнь писал жанровые сцены пасторали пейзажи портреты.
71864. Творчество Рембрандта 14.96 KB
  Работы Рембрандта чрезвычайно разнообразные по жанровой принадлежности открывают зрителю вневременной духовный мир человеческих переживаний и чувств. Однако именно искусство Рембрандта заключает итог общих поисков и по существу представляет собой завершение всего развития...