Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //сервер
- #include "stdafx.h"
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- #include <winsock2.h>
- #include <windows.h>
- #include <iostream>
- #include <stdlib.h>
- #pragma comment(lib, "ws2_32.lib")
- using namespace std;
- int numcl = 0;
- DWORD WINAPI ThreadFunc(LPVOID client_socket)
- {
- struct Spisok
- {
- char Name[100];
- int Grade;
- int Experience;
- char Subject[100];
- };
- Spisok Teacher[10];
- strcpy(Teacher[0].Name, "Smirnov\n\0");
- Teacher[0].Grade =1;
- Teacher[0].Experience = 3;
- strcpy(Teacher[0].Subject, "Matematika\n\0");
- strcpy(Teacher[1].Name, "Petrov\n\0");
- Teacher[1].Grade = 2;
- Teacher[1].Experience = 4;
- strcpy(Teacher[1].Subject, "Physika\n\0");
- strcpy(Teacher[2].Name, "Ivanov\n\0");
- Teacher[2].Grade = 3;
- Teacher[2].Experience = 5;
- strcpy(Teacher[2].Subject, "Russkiy\n\0");
- strcpy(Teacher[3].Name , "Sidorov\n\0");
- Teacher[3].Grade = 3;
- Teacher[3].Experience =6;
- strcpy(Teacher[3].Subject , "Matematika\n\0");
- strcpy(Teacher[4].Name , "Zaytcev\n\0");
- Teacher[4].Grade = 1;
- Teacher[4].Experience = 3;
- strcpy(Teacher[4].Subject , "Physika\n\0");
- strcpy(Teacher[5].Name , "Glazov\n\0");
- Teacher[5].Grade = 2;
- Teacher[5].Experience = 4;
- strcpy(Teacher[5].Subject , "Russkiy\n\0");
- strcpy(Teacher[6].Name , "Medvedev\n\0");
- Teacher[6].Grade = 3;
- Teacher[6].Experience = 5;
- strcpy(Teacher[6].Subject , "Matematika\n\0");
- strcpy(Teacher[7].Name , "Vasil'ev\n\0");
- Teacher[7].Grade = 4;
- Teacher[7].Experience = 6;
- strcpy(Teacher[7].Subject , "Physika\n\0");
- strcpy(Teacher[8].Name , "Sokolov\n\0");
- Teacher[8].Grade = 1;
- Teacher[8].Experience = 3;
- strcpy(Teacher[8].Subject , "Russkiy\n\0");
- strcpy(Teacher[9].Name , "Rybakov\n\0");
- Teacher[9].Grade =2;
- Teacher[9].Experience = 4;
- strcpy(Teacher[9].Subject , "Matematika\n\0");
- SOCKET s2 = ((SOCKET *)client_socket)[0];
- char buf[100]="";
- char buf1[100]="";
- int recvbytes;
- while (recvbytes=recv(s2, buf, sizeof(buf), 0))
- {
- if (recvbytes == SOCKET_ERROR)
- break;
- int i;
- for (i = 0; i < 10; i++)
- {
- if (strcmp(Teacher[i].Subject, buf) == 0 && Teacher[i].Experience >= 5)
- {
- strcat(buf1, Teacher[i].Name);
- }
- }
- if (strlen(buf1) == 0)
- strcat(buf1, "-1");
- strcpy(buf, buf1);
- cout << buf << endl;
- send(s2, buf, 100, 0);
- }
- closesocket(s2);
- numcl--;
- return 0;
- }
- void print()
- {
- if (numcl) printf("%d clients 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;// thID идентификатор типа DWORD
- CreateThread(NULL, NULL, ThreadFunc, &client_socket, NULL, &thID);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement