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

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


Приложение

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


 

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

53592. Базовые концепции финансового менеджмента: концепция эффективности рынка капитала, асимметричной информации, агентских отношений, альтернативных затрат 26.5 KB
  Концепция эффективности рынка капитала. Применительно к рынку капитала термин «эффективность» понимается в информационном плане, т.е. степень эффективности рынка характеризуется уровнем его информационной насыщенности и доступности информации участникам рынка. Выделяют три формы эффективности рынка: слабую, умеренную и сильную.
53593. Система образования в России 69 KB
  Кто догадался про что мы сегодня с вами будем говорить Правильно это образование а тема урока – система образования в России. Кто из вас чтонибудь знает по этой теме Какие ступени образования существуют в нашей стране. По мере ваших рассказов схема системы образования будет наполняться и в конце занятия мы увидим ее полностью.
53594. Здоровье и как его сохранить 67.5 KB
  Здоровье -– это состояние полного физического психологического и социального благополучия а не только отсутствие болезней или физических дефектов. Слайд 3 Основные составляющие современной концепции здоровья: Физическая – включает в себя уровень роста и развитие органов и систем организма а также текущее состояние их функционирования; ...
53595. Анализ ликвидности и платежеспособности 32.5 KB
  Под ликвидностью актива понимают его способность трансформироваться в денежные средства, а степень ликвидности определяется продолжительностью временного периода, в течение которого эта трансформация может быть осуществлена
53596. Введение в науку информатика 82 KB
  Термин информатика возник в 60е годы во Франции в связи с развитием компьютерной микропроцессорной техники для обозначения новой научной области занимающейся автоматизированной обработкой информации с помощью электронных вычислительных машин. Французский термин informtique информатика образован от двух слов informtion информация и utomtique автоматика и означает информационная автоматика или автоматизированная переработка информации . Информатика – это техническая наука систематизирующая приемы создания хранения обработки и...
53597. СРЕДНЕВЕКОВАЯ ДЕРЕВНЯ И ЕЕ ОБИТАТЕЛИ 70 KB
  План урока: Господская земля и крестьянские наделы. Феодалы и зависимые крестьяне. Крестьянская община.
53598. УРОК КАК ОСНОВНАЯ ФОРМА ОРГАНИЗАЦИИ УЧЕБНОЙ РАБОТЫ В ШКОЛЕ План – конспект урока по изобразительному искусству 38 KB
  Виды изобразительного искусства графика живопись скульптура. Виды декоративноприкладного искусства одежда бижутерия ткани обои керамика ковроткачество и т. Виды конструктивного искусства архитектура и дизайн. Отличительные особенности жанров изобразительного искусства пейзаж натюрморт портрет бытовой жанр исторический жанр анималистический жанр.
53599. Геоинформационные системы в интернете 43.5 KB
  Цели урока: Образовательная знакомство с новейшим классом информационных систем освоение приемов поиска и средств навигации в ГИС 2GIS Тюмень и освоение приемов работы с инструментами в программе Google планета Земля. Что такое геоинформационная система ГИС географическая информационная система это современная...
53600. Правописание буквосочетаний жи, ши 785.5 KB
  Цель: Уточнение представлений учащихся о звуках ж, ш, ц как твёрдых; ознакомление учащихся с особенностями написания сочетания жи ши; развитие умение правильно писать сочетания жи ши; развитие познавательной активность детей; речи учащихся наблюдательности внимания мышления умения работать с книгой. Шишка жёлудь цветок Мягкий или твёрдый согласный звук слышится вначале каждого из этих слов Работа с учебником. У доски работают два ученика. Работа с учебником.