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

Листинг клиентской части:

#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;

char out_buf[100];

char in_buf[100];

char src[100];

int r;

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_STREAM, 0);

con = connect(server_s,( const sockaddr *)&server_addr, sizeof(server_addr)) ;

if(con==0)

{

strcpy(out_buf,"I am second");

send(server_s, out_buf,sizeof(out_buf) , 0);

recv(server_s,in_buf,sizeof(in_buf), 0);

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

while(*out_buf!=*x)

{

printf("->");

gets(out_buf);

send(server_s,out_buf,(strlen(out_buf)+1),0);

printf("\n <- ");

recv(server_s,in_buf,sizeof(in_buf),0);

puts( in_buf);

}

#ifdef WIN

closesocket(server_s);

#endif

#ifdef WIN

WSACleanup();

#endif

}

else

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

getch();

}

Рисунок 1.2 Организация диалога клиент-сервер с помощью протокола TCP/IP

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

  1. Опишите порядок установления соединения «клиент-сервер» по протоколу TCP/IP

Рис. 5 Порядок установления соединения “клиент-сервер”

  1. Как меняется листинг программы в случае многократного обмена сообщениями между клиентом и сервером по протоколу TCP/IP?

- При организации обмена многими сообщениями между клиентом и сервером можно организовать закрытие сокетов и окончание сеанса связи при передаче определенного набора символов, например, команды ‘bay’.

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

Изучение возможностей протокола UDP по передаче сообщений

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

Цель работы: знакомство с протоколом 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");

}

}