Добавил:
inrad
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Компьютерные сети / lab4 / UPDserv / serv
.cpp// подключение библиотек
#include <winsock2.h>
#include <windows.h>
#include <process.h> /* _beginthread, _endthread */
#include <ostream.h>
#include <string.h>
//функция обработки строки
void StringAnalizing(void* s)
{
char b[200]; // переменная для получения данных
int words=0;
// адресная структура
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)
{
cout<<"have a data"<<endl;
cout<<"________________"<<endl;
//счетчик гласных букв
int number = 0;
/////////// пользовательская функция подсчета гласных букв
//массив гласных букв
char alphabet[12] ={'A', 'a', 'E', 'e', 'I', 'i', 'O', 'o', 'U', 'u', 'Y', 'y'};
//поиск гласных букв
char *tokenPtr;
tokenPtr = strtok(b, " ");
while (tokenPtr !=NULL)
{
for (int i=0; i < strlen(tokenPtr); i++)
{
for (int j=0; j<12; j++)
if (tokenPtr[i]==alphabet[j])
number++;
}
if (number<=4) words++;
number = 0;
tokenPtr = strtok(NULL, " ");
}
char buf[10];
_itoa(words, buf,10);
//отправка значения клиенту
sendto((SOCKET)s,buf,sizeof(buf),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;
}