Студопедия — между клиентом и сервером
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

между клиентом и сервером






Цель работы: знакомство с протоколом UDP (User Datagram Protocol – Протокол пользовательских датаграмм).

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

Листинг сервера:

#define WIN

#include <stdio.h>

#include <string.h>

#include <conio.h>

#ifdef WIN

#include <winsock.h>

#endif

#define PORT_NUM 1050

#define MAX_LISTEN 3

#define IP_ADDR "127.0.0.1"

void main()

{

#ifdef WIN

WORD wVersionRequested = MAKEWORD(1,1);

WSADATA wsaData;

#endif

 

unsigned int server_s;

struct sockaddr_in local;

unsigned int client_s;

struct sockaddr_in client_addr;

struct in_addr client_ip_addr;

int addr_len;

char out_buf[100];

char in_buf[100];

int i,r;

char x[]="bay";

local.sin_family = AF_INET;

local.sin_port = htons(PORT_NUM);

local.sin_addr.s_addr = htonl(INADDR_ANY);

#ifdef WIN

WSAStartup(wVersionRequested, &wsaData);

#endif

 

server_s =socket(AF_INET, SOCK_DGRAM, 0);

bind (server_s, (const sockaddr *)&local, sizeof(sockaddr_in));

listen (server_s, MAX_LISTEN);

client_s = accept(server_s, NULL,NULL);

addr_len = sizeof(client_addr);

memcpy((void *)&client_ip_addr,(const void*)&client_addr.sin_addr,sizeof(client_addr.sin_addr));

client_ip_addr=client_addr.sin_addr;

printf("IP address of client = %s port = %d \n",inet_ntoa(client_ip_addr), ntohs(client_addr.sin_port));

recvfrom(server_s, in_buf, sizeof(in_buf), 0, (struct sockaddr *)&client_addr, &addr_len);

printf("Received from client... data = '%s' \n", in_buf);

strcpy(out_buf, "Message -- server to client");

sendto(server_s, out_buf, (strlen(out_buf) + 1), 0, (struct sockaddr *)&client_addr, sizeof(client_addr));

 

//for (i=0; i<5; i++);

while(*out_buf!=*x)

{

printf("<-");

recvfrom(server_s, in_buf, sizeof(in_buf), 0, (struct sockaddr *)&client_addr, &addr_len);

puts (in_buf);

printf("->");

gets (out_buf);

sendto(server_s, out_buf, (strlen(out_buf) + 1), 0, (struct sockaddr *)&client_addr, sizeof(client_addr));

printf("\n");

}

}

Листинг клиента:

#define WIN

#include <stdio.h>

#include <string.h>

#include <conio.h>

#ifdef WIN

#include <windows.h>

#endif

#define PORT_NUM 1050

//#define IP_ADDR "127.0.0.1"

void main()

{

#ifdef WIN

WORD wVersionRequested = MAKEWORD(1,1);

WSADATA wsaData;

#endif

unsigned int server_s;

struct sockaddr_in server_addr;

//struct sockaddr_in client_addr;

char out_buf[100];

char in_buf[100];

char src[100];

int r;

int addr_len;

char x[]="bay";

server_addr.sin_family = AF_INET;

server_addr.sin_port = htons(1050);

server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

//int con;

#ifdef WIN

WSAStartup(wVersionRequested, &wsaData);

#endif

 

server_s = socket (AF_INET, SOCK_DGRAM, 0);

addr_len = sizeof(server_addr);

strcpy(out_buf,"I am second");

sendto(server_s, out_buf, (strlen(out_buf) + 1), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));

recvfrom(server_s, in_buf, sizeof(in_buf), 0, (struct sockaddr *)&server_addr, &addr_len);

printf("Recieved from server data = '%s' \n",in_buf);

while(*out_buf!=*x)

{

printf("->");

gets(out_buf);

sendto(server_s, out_buf, (strlen(out_buf) + 1), 0, (struct sockaddr *)&server_addr, sizeof(server_addr));

printf("\n <- ");

recvfrom(server_s, in_buf, sizeof(in_buf), 0, (struct sockaddr *)&server_addr, &addr_len);

puts(in_buf);

}

#ifdef WIN

closesocket(server_s);

#endif

#ifdef WIN

WSACleanup();

#endif

// }

//else

// puts("connection faild. run SERVER first");

getch();

}

 

Рис. 2.1. Окно диалога Сервера

Рис. 2.2. Окно диалога Клиента

Контрольные вопросы:

1. Опишите порядок установления соединения по UDP-протоколу

Обычно такой протокол сравнивают с телефонным разговором, а протокол, не требующий соединения, — с отправкой письма. Каждое письмо запечатывается в отдельный конверт, на котором пишется адрес При этом все письма оказываются самостоятельными сущностями. Каждое письмо обрабатывается на почте независимо от других посланий двух данных корреспондентов. Почта не отслеживает историю переписки, то есть состояние последовательности писем. Кроме того, не гарантируется, что письма не затеряются, не заде и будут доставлены в правильном порядке. Это соответствует отправке датаграмм протоколом, не требующим установления соединения.

2. Чем отличается установление соединения по протоколу UDP от установления соединения по протоколу TCP/IP,

Один из фундаментальных вопросов сетевого программирования — это различие между протоколами, требующими установления логического соединения (connection-oriented protocols), например, TCP/IP и протоколами, не требующими этого (connectionless protocols), например, UDP. При работе с протоколом, не требующим соединения, каждый пакет, именуемый датаграммой, адресуется и посылается приложением индивидуально. С точки зрения протокола каждая датаграмма — это независимая единица, не имеющая ничего общего с другими датаграммами, которыми обмениваются приложения.

Обычно это означает, что клиент и сервер не ведут сложного диалога, — клиент посылает запрос, а сервер отвечает на него. Если позже клиент посылает новый запрос, то с точки зрения протокола это новая транзакция, не связанная с предыдущей.







Дата добавления: 2015-06-15; просмотров: 365. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Медицинская документация родильного дома Учетные формы родильного дома № 111/у Индивидуальная карта беременной и родильницы № 113/у Обменная карта родильного дома...

Основные разделы работы участкового врача-педиатра Ведущей фигурой в организации внебольничной помощи детям является участковый врач-педиатр детской городской поликлиники...

Ученые, внесшие большой вклад в развитие науки биологии Краткая история развития биологии. Чарльз Дарвин (1809 -1882)- основной труд « О происхождении видов путем естественного отбора или Сохранение благоприятствующих пород в борьбе за жизнь»...

Этапы творческого процесса в изобразительной деятельности По мнению многих авторов, возникновение творческого начала в детской художественной практике носит такой же поэтапный характер, как и процесс творчества у мастеров искусства...

Тема 5. Анализ количественного и качественного состава персонала Персонал является одним из важнейших факторов в организации. Его состояние и эффективное использование прямо влияет на конечные результаты хозяйственной деятельности организации.

Билет №7 (1 вопрос) Язык как средство общения и форма существования национальной культуры. Русский литературный язык как нормированная и обработанная форма общенародного языка Важнейшая функция языка - коммуникативная функция, т.е. функция общения Язык представлен в двух своих разновидностях...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия