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

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


Приложение

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


 

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

3987. Українська мова за професійним спрямуванням. Курс лекцій 272.12 KB
  Українська літературна мова, її норми та стилі. Лексичні засоби сучасної української мови в офіційно-діловому та науковому стилях. Морфологічні засоби офіційно-ділового та наукового стилів. Синтаксичні засоби сучасної української мови у професійному спілкуванні...
3988. Побудова вибіркової функції розподілу засобами программних технологій 269.36 KB
  Лабораторна робота № 2 ПОБУДОВА ВИБІРКОВОЇ ФУНКЦІЇ РОЗПОДІЛУ ЗАСОБАМИ КОМП’ЮТЕРНИХ ТЕХНОЛОГІЙ Мета і зміст: познайомити студентів з методикою побудови вибіркових функцій розподілу в Excel з використанням інструменту Гістограма з Пакету аналізу ...
3989. Переходные процессы в АСУ 299.7 KB
  Лабораторная работа №7 Переходные процессы в АСУ Цель работы Исследовать переходные процессы в замкнутой АСУ. Выполнить анализ влияния параметров объекта управления и регулятора на показатели качества переходных процессов в АСУ. Построение модели АС...
3990. Програмування таймерів 236.69 KB
  Специфіка програмування модуля TMR0, TMR1, TMR2. Рішення задач. Створення проекту в MPLAB. Створення проекту в PROTEUS. Програмування таймерa TMR0...
3991. Практичні правила управління безпекою інформації 246 KB
  ІSO/IЕС 27002 «Інформаційні технології — Методики безпеки — Практичні правила управління безпекою інформації» Виконала: студентка групи СН-41 Пригодська Галини Миколаївна 1 Найбільш поширеними міжнародними стандартами, які регулюють компле...
3992. Нефтяная Промышленность 1.05 MB
  Нефтяная Промышленность XX в. насыщен многими событиями, которые будоражили и потрясали земную цивилизацию. Шла борьба за передел мира, за сферы экономического и политического влияния, за источники минерального сырья. Среди этого, клокочущего страст...
3993. Вимірювання модуляційної передавальної функції мікроболометричної тепловізійної камери 228.2 KB
  Лабораторна робота №4 Вимірювання модуляційної передавальної функції мікроболометричної тепловізійної камери Мета роботи Ознайомлення з основними методами вимірювання модуляційних передавальних функцій тепловізійних камер, набуття навичок роботи з т...
3994. Совершенствование деятельности органов местного самоуправления по реализации молодежной политики 224.65 KB
  Актуальность темы исследования заключается в том, что молодежь является движущей силой общества, так как её вклад в социально- экономическое развитие страны обеспечивает благосостояние общества. Молодежь необходимо оценивать как часть общес...
3995. Статистические методы обработки опытных данных. Числовые характеристики выборки 225.31 KB
  Лабораторная работа № 5 СТАТИСТИЧЕСКИЕ МЕТОДЫ ОБРАБОТКИ ОПЫТНЫХ ДАННЫХ. ЧИСЛОВЫЕ ХАРАКТЕРИСТИКИ ВЫБОРКИ Цель: Научиться основным методам обработки данных, представленных выборкой. Изучить графические представления данных. Овладеть навыками расчета с...