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;
