Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная по КС.doc
Скачиваний:
188
Добавлен:
01.04.2014
Размер:
296.45 Кб
Скачать

Int main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD(2,2);

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");

SOCKET s=socket(AF_INET,SOCK_DGRAM,0);

int t = sizeof(peer);

char buf[255],b[255];

cout<<"Enter the string, please"<<endl;

// cin>>b;

t = sizeof(peer);

fgets(buf,sizeof(buf),stdin);

buf[strlen(buf) - 1] = '\0';

sendto(s, buf, strlen(buf), 0, (struct sockaddr*) &peer, t);

if (recvfrom(s,buf,sizeof(buf),0,(LPSOCKADDR)&peer,&t)!=0)

{

cout<<buf<<endl;

closesocket(s);

}

WSACleanup();

return 0;

}

Сервер

#include <winsock2.h>

#include <windows.h>

#include <process.h> /* _beginthread, _endthread */

#include <ostream>

#include <string.h>

using namespace std;

void StringAnalizing(void* s)

{

char b[200] = {0};

char tmp[50]={0};

char buf[200] = {0};

int begin, end;//переменные начала и конца слова

sockaddr_in ad;

ad.sin_family = AF_INET;

ad.sin_port = htons(1280);

ad.sin_addr.s_addr = htonl(INADDR_ANY);

int j=sizeof(ad);

int c=bind((SOCKET)s,(LPSOCKADDR)&ad, j);

if (recvfrom((SOCKET)s,b,sizeof(b),0,(LPSOCKADDR) &ad, &j)!=0)

{

end = strlen(b) - 1;

//цикл определяет начало и конец слова, счет идет с конца строки

for(int i = strlen(b); i >= 0; i--)

{

if(b[i] == ' ' || i == 0)

{

begin = i;

int k = 0;

for(int j = begin; j <= end; j++)

{

tmp[k] = b[j];

k++;

}

strcat(buf, tmp);

end = begin;

}

}

strcpy(b, buf);

sendto((SOCKET)s,b,sizeof(b),0,(LPSOCKADDR) &ad, j);

}

}

Int main()

{

WORD wVersionRequested;

WSADATA wsaData;

int err;

wVersionRequested = MAKEWORD(2,2);

err = WSAStartup(wVersionRequested, &wsaData);

if(err != 0)

return -1;

SOCKET s = socket(AF_INET, SOCK_DGRAM,0);

while(true)

{

_beginthread(StringAnalizing,0,(void*)s);

}

// closesocket(s);

WSACleanup();

return 0;

}

Задача 5

Постановка задачи:

В протоколе отправки SMS-сообщений ограничить частоту отправки сообщений с одного IP адреса по времени. Добавить команду sms (без параметров), которая выводила б правила пользования услугой.

Краткое описание алгоритма:

Реализована команда: sms, в результате клиенту выдается информация, что нельзя отправлять более 10 сообщений за минуту с одного ip адреса.

Клиент отправляет строку на сервер в формате: sms <номер телефона> <текст сообщения>. При подключении клиента к серверу сравнивается ip адрес клиента и заносится в массив, если данный ip адрес уже существует, то счетчик отправки смс сообщений будет суммироваться с уже подключенным клиентом с таким ip адресом. При проверке строки сообщения, записывается время отправки первого сообщения и последующих, а так же идет счетчик отправки сообщений. Если количество сообщений превысило более десяти и не прошло более минуты, то выдается сообщение о неудачной отправки сообщения.

Листинг:

Клиент

#include <winsock2.h>

#include <iostream>

using namespace std;