- •Часть 1
- •Клиентское приложение:
- •Серверное приложение:
- •Клиентское приложение:
- •Серверное приложение:
- •Клиентское приложение:
- •Серверное приложение:
- •Клиентское приложение:
- •Клиентское приложение:
- •Часть 2
- •Interframe gap, jam-последовательность, slot time, collision window – назначение и расчет
- •Список использованной литературы.
Серверное приложение:
#define _CRT_SECURE_NO_DEPRECATE 1
#include <iostream>
#include <string>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
int main()
{
// максимальный номер версии WinSock
WORD wVersionRequested;
// структура для WSAStartup
WSADATA wsaData;
// инициализируем WinSock API
wVersionRequested = MAKEWORD(2,2);
int err = WSAStartup(wVersionRequested, &wsaData);
// Создаем серверный сокет, использующий протокол UDP
SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
// Создаем структуру данных соединения
struct sockaddr_in ad;
// Поле sin_family всегда имеет значение AF_INET
ad.sin_family = AF_INET;
// Слушаем 1280 порт
ad.sin_port = htons(1280);
// Слушаем все сетевые соединения
ad.sin_addr.s_addr = htonl(INADDR_ANY);
// Принимаем данные от приложения-клиента
char buf[20];
int monthes[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int j=sizeof(ad);
//Связывание сокета с локальным адресом
int c=bind((SOCKET)s,(LPSOCKADDR)&ad, j);
//Если получены какие-то данные, то обработаем их
if (recvfrom((SOCKET)s,(LPSTR)&buf,sizeof(buf),0,(LPSOCKADDR) &ad, &j)!=0)
{
printf("\nDate received: %s",buf);
char cday[2];
cday[0]=buf[0];
cday[1]=buf[1];
int day=atoi(cday);
char cmonth[2];
cmonth[0]=buf[3];
cmonth[1]=buf[4];
int month=atoi(cmonth);
strcpy(buf,"FALSE");
if(month>12)
sendto((SOCKET)s,(LPCSTR)&buf,sizeof(buf),0,(LPSOCKADDR)&ad,j);
else if(day>monthes[month-1])
sendto((SOCKET)s,(LPCSTR)&buf,sizeof(buf),0,(LPSOCKADDR)&ad,j);
else
{
strcpy(buf,"TRUE");
sendto((SOCKET)s,(LPCSTR)&buf,sizeof(buf),0,(LPSOCKADDR)&ad,j);
}
}
// Завершаем работу сокета
closesocket(s);
// Завершаем использование WinSock DLL
WSACleanup();
return 0;
}
Клиентское приложение:
#include <winsock2.h>
#include <iostream>
#include<stdio.h>
#include<io.h>
#pragma comment(lib, "ws2_32.lib")
char name[256];
//Главная функция программы
int main()
{
//Инициализация библиотеки WinSock
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2,2);
int err = WSAStartup(wVersionRequested, &wsaData);
struct sockaddr_in peer;
peer.sin_family=AF_INET;
peer.sin_port=htons(1280);
peer.sin_addr.s_addr=inet_addr("127.0.0.1");
//Создание сокета UDP
SOCKET s=socket(AF_INET,SOCK_DGRAM,0);
connect (s, (struct sockaddr*)&peer, sizeof (peer));
int t=sizeof(peer);
//Ввод пользователем даты
puts("Enter the date (dd.mm.yy): ");
gets(name);
//Отправка даты файла серверу
sendto(s,(LPCSTR)&name,sizeof(name),0,(LPSOCKADDR)&peer,t);
if (recvfrom((SOCKET)s,(LPSTR)&name,sizeof(name),0,(LPSOCKADDR) &peer, &t )!=0)
printf("\nReceived: %s\n",name);
//Очистка структур WinSock
WSACleanup();
return 0;
}
Результаты тестирования:

Рисунок 3 – Запущено серверное приложение

Рисунок 4 – Результат работы клиентского приложения
Задача №3
Осуществить взаимодействие клиента и сервера на основе протокола TCP/IP. Реализовать параллельное соединение с использованием многопоточности. Функциональные возможности клиента реализовать следующим образом: клиент вводит с клавиатуры строку символов и посылает ее серверу. Признак окончания ввода строки - нажатие клавиши "Ввод". Функциональные возможности сервера реализовать следующим образом: сервер, получив эту строку, должен определить длину введенной строки, и, если эта длина четная, то удаляются 3 первых и 2 последних символа. Результаты преобразований этой строки возвращаются назад клиенту.
