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

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


Приложение

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


 

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

51540. ЗАПОРІЗЬКА СІЧ В ІІ ПОЛОВИНІ Х\/ІІ СТОЛІТТЯ 82.5 KB
  Історичний атлас портрет Івана Сірка картина Розповідь учителя Демонстрація портрета Івана Сірка. Про народження Сірка легенда розповідає що він зявився на світ із зубами і тількино повитуха піднесла його до столу від одразу ж ухопив звідти пиріг з начинкою і зїв його. сказано що Бог його вибрав Сірка поклавши свій знак з правого боку на губі як червоний плат.
51541. СЦЕНАРІЙ ДО ДНЯ ВЧИТЕЛЯ 54.5 KB
  Ведуча: Вклонiться люди вчителю своєму Володаревi слова i пера Крiзь бiль i радiсть роздуми i втому любов його безсмертна проросла. Ведуча: Дорогi вчителi До Вас сьогоднi слова щирої шани сердечної вдячностi. Ведуча: Щоранку поспiшає до школи наш директор.I сьогоднi дорогий наш директор даруємо Вам...
51542. 1 вересня 91.5 KB
  І ліцей відкриває гостинно всі двері назустріч новій дітворі. Сміх навкруги розсипає Дружна ліцейна сімя Сьогодні знов у наше братство проводжає Дітей своїх Україна моя Ідуть вони в ліцей знання щоб здобувати Щоб стати найкращими в світі І щоб Україну свою будувати Й прославить у цьому столітті. Знов гомінливо у ліцейному дворі Це значить що стартує рік навчальний Ми зустрічаємо із відкритим серцем першачків Ліцей співає пісню величальну Хор співає Зелене жито Слова палкі мелодія врочиста Державний гімн і прапор майорить...
51543. Планирование на предприятии. Е.О. Ушакова 574.5 KB
  В методических указаниях изложены основные практические вопросы, входящие в стандартный курс дисциплины «Планирование на предприятии». В данном издании приведена программа курса, практические задания, темы курсовых работ, методические указания по выполнению курсовой работы, темы семинарских занятий, контрольные вопросы, тестовые задания для проверки знаний студентов и список рекомендуемой литературы.
51544. Сценарій свята День знань для першокласників 11.86 MB
  Сценарій свята Перший урок у першому класі Дійові особи: Коза Дереза Телесик вчителька першокласники учні 5ого класу. Вчителька. Шановна пані Може ви знаєте що тут за свято І хто ви така Вчителька. Здрастуйте добродійко Я вчителька.
51545. Знову до школи 54 KB
  How mny units re there in this textbook Wht re the nmes of these units Wht re we going to study in them Wht sections re there t the end of the book Wht informtion cn you find in these sections Учні ланцюжком відповідають на запитання вчителя. Look t the picture nd tell wht we re going to tlk bout during our lesson tody. Т: sk your friends wht they did during the summer holidys. HO1: Wht did your friends do during June: ________________________________________________________________________________ July:...