Добавил:
inrad
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Компьютерные сети / lab3 / TCPserv / serv
.cpp// подключение библиотек
#include<stdio.h>
#include<iostream.h>
#include<winsock2.h>
//функция решения задачи по
//удалению центрального символа из строк с нечетным количеством символов
DWORD WINAPI ThreadFunc(LPVOID client_socket)
{
SOCKET s2=((SOCKET *) client_socket)[0];
char buf[100];
while(recv(s2,buf,sizeof(buf),0))
{
cout<<"have a data"<<endl;
int k;
k=strlen(buf)-1;
////////////////
if(k%2!=0)
{
for(int i=(k/2); i<(k); i++)
{
buf[i]=buf[i+1];
}
buf[k] ='\0';
}
////////////////
cout<<buf<<endl;
send(s2,buf,k,0);
}
closesocket(s2);
return 0;
}
int numcl=0;
//функция печати на экран количества подключенных клиентов
void print()
{
if (numcl) printf("%d client connected\n",numcl);
else printf("No clients connected\n");
}
//главная функция
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
SOCKET s=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in local_addr;
local_addr.sin_family=AF_INET;
local_addr.sin_port=htons(1280);
local_addr.sin_addr.s_addr=0;
bind(s,(sockaddr *) &local_addr,sizeof(local_addr));
int c=listen(s,5);
cout<<"Server receive ready"<<endl;
cout<<endl;
// извлекаем сообщение из очереди
SOCKET client_socket; // сокет для клиента
sockaddr_in client_addr; // адрес клиента(заполняется системой)
int client_addr_size=sizeof(client_addr);
// цикл извлечения запросов на подключение из очереди
while((client_socket=accept(s,(sockaddr *)&client_addr, &client_addr_size)))
{
numcl++;
print();
// Вызов нового потока для обслуживания клиента
DWORD thID;
CreateThread(NULL,NULL,ThreadFunc,&client_socket,NULL,&thID);
}
}