Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
отчет по лабам.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
282.08 Кб
Скачать

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

#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-протоколу

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

  1. Чем отличается установление соединения по протоколу udp от установления соединения по протоколу tcp/ip,

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

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