66497
Механизмы сетевого взаимодействия
Лабораторная работа
Информатика, кибернетика и программирование
Цель работы – изучить программный интерфейс сетевых сокетов, получить навыки организации взаимодействия программ при помощи протоколов Internet и разработки прикладных сетевых сервисов.
Русский
2014-08-22
39.5 KB
1 чел.
Министерство образования и науки Российской Федерации
Санкт-Петербургский государственный политехнический университет
Факультет технической кибернетики
Кафедра «Информационная безопасность компьютерных систем»
ЛАБОРАТОРНАЯ РАБОТА № 8
Механизмы сетевого взаимодействия
по дисциплине «Операционные системы»
Выполнил
студент гр. 2088/1 А.С. Никитин
<подпись>
Руководитель
Т.В. Степанова
<подпись>
Санкт-Петербург
2011
Цель работы изучить программный интерфейс сетевых сокетов, получить навыки организации взаимодействия программ при помощи протоколов Internet и разработки прикладных сетевых сервисов.
Разработать на языке 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;
}
Сетевые сокеты предоставляют удобный интерфейс взаимодействия программ, находящихся как на одном компьютере, так и на разных, при условии нахождения их в одной сети.
Приложение
А также другие работы, которые могут Вас заинтересовать | |||
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:... | |||