Курс 2 Семестр 3 Лекции: 36 (часа) Лабораторные работы: 18(часов) Составитель к ф. м н. доцент Харитонов С. И. Самара 2010

Вид материалаЛекции

Содержание


Если студент приходит с программой оформление которой не удовлетворяет вышеизложенным требованиям он не получает зачет (даже в с
Лабораторная работа 1
Лабораторная работа 3(вариант совпадает с номером варианта лабораторной 1)
Написание и отладка простейшей CGI-программы
Расчет специальных функций
Имя поля: %s, значение поля: %s
Расчет функций Бесселя
Расчет Гамма-функции
Правая граница: %f,",xright); printf("Шаг: %f,",xstep); printf("Порядок функции: %d
Расчет специальных функций
Принципы построения составных сетей
Локализация трафика и изоляция сетей
Согласование протоколов канального уровня
Маршрутизация в сетях с произвольной топологией
Сетевой уровень и модель OSI
Функции сетевого уровня
Протоколы передачи данных и протоколы обмена маршрутной информацией
Стек протоколов TCP/IP
Структура стека TCP/IP. Краткая характеристика протоколов
TCP (Transmission Control Protocol) и протокол дейтаграмм пользователя UDP
...
Полное содержание
Подобный материал:
  1   2   3   4   5   6   7   8

ОБЩЕСТВЕННАЯ ОРГАНИЗАЦИЯ

САМАРСКИЙ ВОЛЬНЫЙ УНИВЕРСИТЕТ




Лабораторные работы


По дисциплине " Компьютерные телекоммуникации» для направления 511600 - прикладная математика и физика

Форма обучения - дневная


Курс 2

Семестр 3


Лекции: 36 (часа)

Лабораторные работы: 18(часов)


Составитель к.ф.-м.н. доцент Харитонов С.И.


САМАРА 2010

Внимание!!!


Зачет принимается только 1 раз.

Повторная сдача после сессии.

Порядок сдачи лабораторных работ.


Обратить особое внимание на оформление текста программ!!!


1.Каждая программа должна иметь help для работы с ней.

В нем должны быть следующие пункты

    1. Что она делает
    2. Какие параметры программа получает на вход
    3. Какие параметры получаются на выходе.
    4. Как скомпилировать исходный текст (в файле readme)
    5. Help должен вызываться следующим образом

Имя_программы –help


2. К каждой программе должны быть приложены тесты, которые показывают, что программа считает правильно.

Тесты должны быть описаны в файле testme


3. Клиент и сервер должен работать постоянно и заканчивать свою работу по команде от клиента т.е чтобы прервать работу с сервера необходимо набрать команду от клиента .


Если студент приходит с программой оформление которой не удовлетворяет вышеизложенным требованиям он не получает зачет (даже в случае работающей программы).


Пароли для гостевых пользователей

student:cnpk68GGokub

student1:ck2brnFKpnd0

student2:kbuvi3bQLq8e

student3:PM6ud8nwexrc

student4:Prx3egvr1ohZ

student5:Tvleaf4pn0tK

student6:cqsrrk76sUWs


Лабораторные работы по курсу “Компьютерные телекоммуникации”


Лабораторная работа 1


Работа в операционной системе LINUX. Отладка и компиляция простейшей программы


1 Метод Гаусса для решения систем уравнений

2 Метод Симпсона для вычисления интегралов

3 Метод простой итерации для трансиндентных уравнений

4 Метод Ньютона для трансиндентных уравнений

5 Вычисление градиента двумерной функции

6 Обращение матрицы

7 Нахождение корней полинома

8 Решение дифференциального уравнения методом Эйлера

9 Решение дифференциального уравнения методом Рунге-Кутта

10 Вычисление функции Бесселя

11 Вычисление сферических функции Бесселя

12 Вычисление полиномов Эрмита

13 Вычисление полиномов Чебышева

14 Вычисление интеграла вероятности

15 Вычисление интегралов Френеля

16 Вычисление модифицированных функции Бесселя


Вызов файлового менеджера mc

Создание файла touch filename.c

Компиляция производится с помощью команды

gcc –lm –o outputfile inputfile


Порядок выполнение лабораторной работы
  1. Разработка метода вычислений
  2. Разработка пользовательского интерфейса(интерфейс командной строки). Интерфейс должен включать ввод и вывод с экрана а такжеиз файла параметров
  3. Написание кода
  4. Отладка программы
  5. Тестирование программы


Лабораторная работа 2

Изучение системных вызовов для работы с файлами


1 Копирование, перемещение, удаление файлов с помощью системных вызовов.

2 Получение информации о файле.

3 Создание файла с заданными правами

4 Разбиение файла на несколько для записи на дискету.

5 Соединение нескольких файлов в один


Лабораторная работа 3(вариант совпадает с номером варианта лабораторной 1)


Передача данных с помощью именованных и неименованных каналов

Простейшее клиент-серверное приложение

Клиент получает данные от пользователя и передает их серверу.

Сервер вычислительную задачу и передает клиенту результат вычислений.

Клиент выводит результат.

Порядок выполнение лабораторной работы
  1. Разработка метода вычислений
  2. Разработка пользовательского интерфейса(интерфейс командной строки). Интерфейс должен включать ввод и вывод с экрана а такжеиз файла параметров
  3. Разработка клиент серверного приложения
  4. Написание кода
  5. Отладка программы
  6. Тестирование программы


#include

#include

#include

#define FIFO "fifo1"

#define MAXBUF 80


int main (){

int writefd ,n;

char buff[MAXBUF];

char msg[]= "Здравствуй мир!\n";

if(writefd=open(FIFO,O_WRONLY)<0) {

printf("Невозможно открыть FIFO \n"); exit(1);

}


if(write(writefd,msg,16)!=16){

printf("Ошибка записи \n"); exit(1);

}

close(writefd);

if(unlink(FIFO)<0){

printf("невозможно удалить FIFO \n"); exit(1);

}

exit(0);

}

#include

#include

#include

#define FIFO "fifo1"

#define MAXBUF 80


int main (){

int readfd ,n;

char buff[MAXBUF];

if(mknod(FIFO,S_IFIFO | 0666,0)<0) {

printf("Невозможно создать FIFO \n"); exit(1);

}

if(readfd=open(FIFO,O_RDONLY)<0) {

printf("Невозможно открыть FIFO \n"); exit(1);

}

while ((n=read(readfd,buff,MAXBUF))>0){

if(write(1,buff,n)!=n){

printf("Ошибка ввода \n"); exit(1);

}

}

printf("\n");

close(readfd);

exit(0);

}

Программа-обработчик сигналов в LINUX.(При выполнении лабораторной работы обработчик сигнала –вычислительная программа)

#include

#include

#include

#include


int ntimes=0;


main(){

pid_t pid,ppid;

void p_action(int),c_action(int);

static struct sigaction pact,cact;

pact.sa_handler=p_action;

sigaction(SIGUSR1,&pact,NULL);

switch(pid=fork()){

case -1:

perror("syncro");

exit(1);

case 0:

cact.sa_handler=c_action;

sigaction(SIGUSR1,&cact,NULL);

ppid=getppid();

for(;;){

sleep(1);

kill(ppid,SIGUSR1);

pause();

}

default:

for(;;){

pause();

sleep(1);

kill(pid,SIGUSR1);

}

}


}

void p_action(int sig){

printf("Родительский процесс получил сигнал#%d\n",ntimes++);

}


void c_action(int sig){

printf("Дочерний процесс получил сигнал#%d\n",ntimes++);

}


Лабораторная работа 4(вариант совпадает с номером варианта в лабораторной 1)

Передача данных с помощью сокетов UNIX и сокетов INTERNET.


Простейшее клиент-серверное приложение

Клиент получает данные от пользователя и передает их серверу.

Сервер вычислительную задачу и передает клиенту результат вычислений.

Клиент выводит результат.
  1. Разработка метода вычислений
  2. Разработка пользовательского интерфейса(интерфейс командной строки). Интерфейс должен включать ввод и вывод с экрана а такжеиз файла параметров
  3. Разработка клиент серверного приложения
  4. Написание кода
  5. Отладка программы
  6. Тестирование программы



#include

#include

#include

#include

#define MAXBUF 256

char *msg="Здравствуй Мир!\n";

char buf[MAXBUF];

int main() {

struct sockaddr_un serv_addr,clnt_addr;

int sockfd;

int saddrlen,caddrlen,msglen,n;

bzero(&serv_addr,sizeof(serv_addr));

serv_addr.sun_family=AF_UNIX;

strcpy(serv_addr.sun_path,"./echo.server");

saddrlen=sizeof( serv_addr.sun_family)+strlen(serv_addr.sun_path);

if((sockfd=socket(AF_UNIX,SOCK_DGRAM,0))<0){

printf("невозможно создать сокет\n");exit(1);

}

bzero(&clnt_addr,sizeof(clnt_addr));

clnt_addr.sun_family=AF_UNIX;

strcpy(clnt_addr.sun_path,"/tmp/clnt.XXXX");

mktemp(clnt_addr.sun_path);

caddrlen=sizeof(clnt_addr.sun_family)+strlen(clnt_addr.sun_path);

if(bind(sockfd,(struct sockaddr *)&clnt_addr,caddrlen)<0){

printf("Ошибка связывания сокета\n");exit(1);

}

msglen=strlen(msg);

if(sendto(sockfd,msg,msglen,0,(struct sockaddr*)&serv_addr,saddrlen)!=msglen){

printf("Ошибка передачи сообщения\n"); exit(1);

}

if((n=recvfrom(sockfd,buf,MAXBUF,0,NULL,0))<0){

printf("Ошибка получения сообщения\n");exit(1);

}

printf("Эхо:%s\n",buf);

close (sockfd);

unlink(clnt_addr.sun_path);

exit(0);

}

#include

#include

#include

#include

#define MAXBUF 256

char *msg="Здравствуй Мир!\n";

char buf[MAXBUF];

int main() {

struct sockaddr_un serv_addr,clnt_addr;

int sockfd;

int saddrlen,caddrlen,max_caddrlen,n,m;

if((sockfd=socket(AF_UNIX,SOCK_DGRAM,0))<0){

printf("невозможно создать сокет\n");exit(1);

}

unlink("./echo.server");

bzero(&serv_addr,sizeof(serv_addr));

serv_addr.sun_family=AF_UNIX;

strcpy(serv_addr.sun_path,"./echo.server");

saddrlen=sizeof( serv_addr.sun_family)+strlen(serv_addr.sun_path);

if(bind(sockfd,(struct sockaddr*)&serv_addr,saddrlen)<0){

printf("Ошибка связывания сокета с адресом\n");exit(1);

}

max_caddrlen=sizeof(clnt_addr);

for(; ;){

caddrlen=max_caddrlen;

n=recvfrom(sockfd,buf,MAXBUF,0,(struct sockaddr_un *)&clnt_addr,&caddrlen);

printf("Сообщение:\%s n=%d\n",buf,n);

if(n<0){

printf("Ошибка приема\n");exit(1);

}

m=sendto(sockfd,buf,n,0,(struct sockaddr *)&clnt_addr,caddrlen);

printf("m=%d\n",m);

if(m!=n){

printf("Ошибка передачи сообщения\n"); exit(1);

}


}

printf("конец\n");

}

Передача данных с помощью сокетов UNIX и сокетов INTERNET.

Простейшее клиент-серверное приложение

#include

#include

#include

#include

#include

#include

#include

#define PORTNUM 1500

main(int argc, char *argv[]){

int s, ns,i;

int nport,pid;

struct sockaddr_in serv_addr, clnt_addr;

struct hostent *hp;

char buf[80]="Здравствуй Мир", hname[80];

unsigned short int nport_;

if((hp=gethostbyname(argv[1]))==0){

perror("Ошибка вызова gethostbyname() "); exit(3);

}

nport=PORTNUM;

nport_=nport;

bzero(&serv_addr,sizeof(serv_addr));

bcopy(hp->h_addr,&serv_addr.sin_addr,hp->h_length);

serv_addr.sin_family=hp->h_addrtype;

serv_addr.sin_port=htons(nport_);

if((s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==-1){

perror("Ошибка вызова socket()"); exit(1);

}

fprintf(stderr,"IP-адрес сервера:%s\n",inet_ntoa(serv_addr.sin_addr));

if(connect(s,(struct sockaddr_in *)&serv_addr, sizeof(serv_addr))==-1){

perror("Ошибка вызова connect()"); exit(1);

}

send(s,buf,sizeof(buf),0);

if (recv(s,buf,sizeof(buf),0)<0) {

perror("Ошибка вызова recv()"); exit(1);

}

printf("Получено от сервера:%s\n",buf);

close(s);

printf("Клиент завершил работу\n\n");

}

#include

#include

#include

#include

#include

#include

#include

#define PORTNUM 1501

main(int argc, char *argv[]){

int s, ns;

int nport,pid;

struct sockaddr_in serv_addr, clnt_addr;

struct hostent *hp;

char buf[80], hname[80];

unsigned short int nport_;

nport=PORTNUM;

nport_=nport;

nport_=htons(nport_);


/* if((hp=gethostbyname(argv[1]))==0){

perror("Ошибка вызова gethostbyname() "); exit(1);

}*/


if((s=socket(AF_INET,SOCK_STREAM,0))==-1){

perror("Ошибка вызова socket()"); exit(1);

}


bzero(&serv_addr,sizeof(serv_addr));

/* bcopy(hp->h_addr,&serv_addr.sin_addr,hp->h_length);*/

serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=INADDR_ANY;

serv_addr.sin_port=nport_;

if(bind(s,(struct sockaddr *)&serv_addr,sizeof(serv_addr))==-1){

perror("Ошибка вызова bind()");exit(1);

}

fprintf(stderr,"Сервер готов:%s\n",inet_ntoa(serv_addr.sin_addr));

if (listen(s,5)==-1){

perror("Ошибка вызова listen()"); exit(1);

}

while(1){

int addrlen;

bzero(&clnt_addr,sizeof(clnt_addr));

addrlen=sizeof(clnt_addr);

if((ns=accept(s,(struct sockaddr *)&clnt_addr,&addrlen))==-1){

perror("Ошибка вызова accept()"); exit(1);

}

fprintf(stderr,"IP-адрес клиента=%s\n",inet_ntoa(clnt_addr.sin_addr));

if((pid=fork())==-1){

perror("Ошибка вызова fork()"); exit();

}

if (pid==0){

int nbytes;

int fout;

close(s);

while((nbytes=recv(ns,buf,sizeof(buf),0))!=0) {

send(ns,buf,nbytes,0);

}

close(ns);

exit(0);

}

close(ns);

}


}


Лабораторная работа 5(вариант совпадает с номером варианта в лабораторной 1)


Написание и отладка простейшей CGI-программы


Клиент получает данные от пользователя и передает их серверу.

Сервер вычислительную задачу и передает клиенту результат вычислений.

Клиент выводит результат.
  1. Разработка метода вычислений
  2. Разработка пользовательского интерфейса(web-интерфейс )
  3. Разработка клиент серверного приложения
  4. Написание кода
  5. Отладка программы
  6. Тестирование программы



#include

#include

#include

#include

#define MAXSIZE 255

int main (){

struct param {

char *name,*value;};

struct param prm[MAXSIZE];

char str[MAXSIZE];

char* tok,*p,*str1;

int switchval=0;

char *ptr_paramname,*ptr_paramvalue;

int i=0,xorder;

double xleft,xright,xstep,x;

if(fgets(str,MAXSIZE,stdin)!=0) {

printf ("Content-type: text/html\n");

printf ("\n");

printf ("");

printf (" Расчет специальных функций");

printf ("");

printf ("");

printf("