Advertisement
Guest User

server

a guest
Nov 24th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.65 KB | None | 0 0
  1. //сервер
  2. #include "stdafx.h"
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <string.h>
  6. #include <winsock2.h>
  7. #include <windows.h>
  8. #include <iostream>
  9. #include <stdlib.h>
  10. #pragma comment(lib, "ws2_32.lib")
  11. using namespace std;
  12. int numcl = 0;
  13. DWORD WINAPI ThreadFunc(LPVOID client_socket)
  14. {
  15.     struct Spisok
  16.     {
  17.         char Name[100];
  18.         int Grade;
  19.         int Experience;
  20.         char Subject[100];
  21.     };
  22.     Spisok Teacher[10];
  23.        
  24.     strcpy(Teacher[0].Name, "Smirnov\n\0");
  25.     Teacher[0].Grade =1;
  26.     Teacher[0].Experience = 3;
  27.     strcpy(Teacher[0].Subject, "Matematika\n\0");
  28.     strcpy(Teacher[1].Name, "Petrov\n\0");
  29.     Teacher[1].Grade = 2;
  30.     Teacher[1].Experience = 4;
  31.     strcpy(Teacher[1].Subject, "Physika\n\0");
  32.     strcpy(Teacher[2].Name, "Ivanov\n\0");
  33.     Teacher[2].Grade = 3;
  34.     Teacher[2].Experience = 5;
  35.     strcpy(Teacher[2].Subject, "Russkiy\n\0");
  36.     strcpy(Teacher[3].Name , "Sidorov\n\0");
  37.     Teacher[3].Grade = 3;
  38.     Teacher[3].Experience =6;
  39.     strcpy(Teacher[3].Subject , "Matematika\n\0");
  40.     strcpy(Teacher[4].Name , "Zaytcev\n\0");
  41.     Teacher[4].Grade = 1;
  42.     Teacher[4].Experience = 3;
  43.     strcpy(Teacher[4].Subject , "Physika\n\0");
  44.     strcpy(Teacher[5].Name , "Glazov\n\0");
  45.     Teacher[5].Grade = 2;
  46.     Teacher[5].Experience = 4;
  47.     strcpy(Teacher[5].Subject , "Russkiy\n\0");
  48.     strcpy(Teacher[6].Name , "Medvedev\n\0");
  49.     Teacher[6].Grade = 3;
  50.     Teacher[6].Experience = 5;
  51.     strcpy(Teacher[6].Subject , "Matematika\n\0");
  52.     strcpy(Teacher[7].Name , "Vasil'ev\n\0");
  53.     Teacher[7].Grade = 4;
  54.     Teacher[7].Experience = 6;
  55.     strcpy(Teacher[7].Subject , "Physika\n\0");
  56.     strcpy(Teacher[8].Name , "Sokolov\n\0");
  57.     Teacher[8].Grade = 1;
  58.     Teacher[8].Experience = 3;
  59.     strcpy(Teacher[8].Subject , "Russkiy\n\0");
  60.     strcpy(Teacher[9].Name , "Rybakov\n\0");
  61.     Teacher[9].Grade =2;
  62.     Teacher[9].Experience = 4;
  63.     strcpy(Teacher[9].Subject , "Matematika\n\0");
  64.    
  65.     SOCKET s2 = ((SOCKET *)client_socket)[0];
  66.     char buf[100]="";
  67.     char buf1[100]="";
  68.     int recvbytes;
  69.     while (recvbytes=recv(s2, buf, sizeof(buf), 0))
  70.     {
  71.         if (recvbytes == SOCKET_ERROR)
  72.             break;
  73.         int i;
  74.  
  75.         for (i = 0; i < 10; i++)
  76.         {
  77.             if (strcmp(Teacher[i].Subject, buf) == 0 && Teacher[i].Experience >= 5)
  78.             {
  79.  
  80.             strcat(buf1, Teacher[i].Name);
  81.             }
  82.         }
  83.        
  84.         if (strlen(buf1) == 0)
  85.             strcat(buf1, "-1");
  86.  
  87.         strcpy(buf, buf1);
  88.         cout << buf << endl;
  89.         send(s2, buf, 100, 0);
  90.     }
  91.     closesocket(s2);
  92.     numcl--;
  93.     return 0;
  94. }
  95. void print()
  96. {
  97.     if (numcl) printf("%d clients connected\n", numcl);
  98.     else printf("No clients connected\n");
  99. }
  100. void main()
  101. {  
  102.     WORD wVersionRequested;
  103.     WSADATA wsaData;
  104.     int err;
  105.     wVersionRequested = MAKEWORD(2, 2);
  106.     err = WSAStartup(wVersionRequested, &wsaData);
  107.     if (err != 0) { return; }
  108.     SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
  109.     sockaddr_in local_addr;
  110.     local_addr.sin_family = AF_INET;
  111.     local_addr.sin_port = htons(1280);
  112.     local_addr.sin_addr.s_addr = 0;
  113.     bind(s, (sockaddr *)&local_addr, sizeof(local_addr));
  114.     int c = listen(s, 5);
  115.     cout << "Server receive ready" << endl;
  116.     cout << endl;
  117.     // извлекаем сообщение из очереди
  118.     SOCKET client_socket; // сокет для клиента
  119.     sockaddr_in client_addr; // адрес клиента (заполняется системой)
  120.     int client_addr_size = sizeof(client_addr);
  121.     // цикл извлечения запросов на подключение из очереди
  122.     while ((client_socket = accept(s, (sockaddr *)&client_addr, &client_addr_size)))
  123.     {
  124.         numcl++;
  125.         print();
  126.         // Вызов нового потока для обслуживания клиента
  127.         DWORD thID;// thID идентификатор типа DWORD
  128.         CreateThread(NULL, NULL, ThreadFunc, &client_socket, NULL, &thID);
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement