Курс 2 Семестр 3 Лекции: 36 (часа) Лабораторные работы: 18(часов) Составитель к ф. м н. доцент Харитонов С. И. Самара 2010
Вид материала | Лекции |
- Пояснительная записка Курс «Физико-химические методы исследования» преподается в течение, 294.52kb.
- Семестр Весенний Весенний лекции 24 часа 0,67 кредита Лабораторные з анятия 24 часа, 298.22kb.
- Бакалаврская программа Обязательный курс Курс: гфб-1 Семестр: 2 Количество кредитов:, 356.08kb.
- Курс II семестр 4 Трудоёмкость: базовая часть 0 часов вариативная часть 0 часов, 107.5kb.
- Обязательный курс Объем учебной нагрузки: 74 часа лекции, 356 часов лабораторные работы, 259.26kb.
- Аннотация рабочей программы дисциплины «Дифракционный структурный анализ» Направление, 26.86kb.
- Бакалаврская программа №7b по дисциплине «международное морское право» Автор-составитель, 329.55kb.
- Магистреская программа №4m по дисциплине «международное транспортное право» Автор-составитель, 534.29kb.
- Курс 4 Семестр 7 Лекции 12 часов Практические (семинарские) занятия: 24 часа Зачет, 375.3kb.
- Обязательный курс Объем учебной нагрузки: 2 семестр часть I 36 часов лекции (темы, 229.09kb.
ОБЩЕСТВЕННАЯ ОРГАНИЗАЦИЯ
САМАРСКИЙ ВОЛЬНЫЙ УНИВЕРСИТЕТ
Лабораторные работы
По дисциплине " Компьютерные телекоммуникации» для направления 511600 - прикладная математика и физика
Форма обучения - дневная
Курс 2
Семестр 3
Лекции: 36 (часа)
Лабораторные работы: 18(часов)
Составитель к.ф.-м.н. доцент Харитонов С.И.
САМАРА 2010
Внимание!!!
Зачет принимается только 1 раз.
Повторная сдача после сессии.
Порядок сдачи лабораторных работ.
Обратить особое внимание на оформление текста программ!!!
1.Каждая программа должна иметь help для работы с ней.
В нем должны быть следующие пункты
- Что она делает
- Какие параметры программа получает на вход
- Какие параметры получаются на выходе.
- Как скомпилировать исходный текст (в файле readme)
- 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
Порядок выполнение лабораторной работы
- Разработка метода вычислений
- Разработка пользовательского интерфейса(интерфейс командной строки). Интерфейс должен включать ввод и вывод с экрана а такжеиз файла параметров
- Написание кода
- Отладка программы
- Тестирование программы
Лабораторная работа 2
Изучение системных вызовов для работы с файлами
1 Копирование, перемещение, удаление файлов с помощью системных вызовов.
2 Получение информации о файле.
3 Создание файла с заданными правами
4 Разбиение файла на несколько для записи на дискету.
5 Соединение нескольких файлов в один
Лабораторная работа 3(вариант совпадает с номером варианта лабораторной 1)
Передача данных с помощью именованных и неименованных каналов
Простейшее клиент-серверное приложение
Клиент получает данные от пользователя и передает их серверу.
Сервер вычислительную задачу и передает клиенту результат вычислений.
Клиент выводит результат.
Порядок выполнение лабораторной работы
- Разработка метода вычислений
- Разработка пользовательского интерфейса(интерфейс командной строки). Интерфейс должен включать ввод и вывод с экрана а такжеиз файла параметров
- Разработка клиент серверного приложения
- Написание кода
- Отладка программы
- Тестирование программы
#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.
Простейшее клиент-серверное приложение
Клиент получает данные от пользователя и передает их серверу.
Сервер вычислительную задачу и передает клиенту результат вычислений.
Клиент выводит результат.
- Разработка метода вычислений
- Разработка пользовательского интерфейса(интерфейс командной строки). Интерфейс должен включать ввод и вывод с экрана а такжеиз файла параметров
- Разработка клиент серверного приложения
- Написание кода
- Отладка программы
- Тестирование программы
#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-программы
Клиент получает данные от пользователя и передает их серверу.
Сервер вычислительную задачу и передает клиенту результат вычислений.
Клиент выводит результат.
- Разработка метода вычислений
- Разработка пользовательского интерфейса(web-интерфейс )
- Разработка клиент серверного приложения
- Написание кода
- Отладка программы
- Тестирование программы
#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("