Endil

cn-lab1-server

Sep 3rd, 2015
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. // CN-lab1-server.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <winsock2.h>
  6. #include <iostream>
  7. #include <windows.h>
  8. #include <string>
  9.  
  10. #pragma comment(lib, "ws2_32.lib")
  11.  
  12. using namespace std;
  13.  
  14. DWORD WINAPI client_processing(LPVOID client_socket) {
  15.     SOCKET my_socket;
  16.     my_socket = ((SOCKET *)client_socket)[0];
  17.     char recv_buff[1024];
  18.     recv(my_socket, &recv_buff[0], sizeof(recv_buff) - 1, 0);
  19.     string s(recv_buff), is_pal = "1";
  20.     for (int i = 0, l = s.length(); i <= l / 2; i++) {
  21.         if (s[i] != s[l - 1 - i]) {
  22.             is_pal[0] = '0';
  23.             break;
  24.         }
  25.     }
  26.     char *send_buff = &is_pal[0];
  27.     send(my_socket, send_buff, sizeof(is_pal) - 1, 0);
  28.     cout << "Connection closed" << endl;
  29.     closesocket(my_socket);
  30.     return 0;
  31. }
  32.  
  33. int _tmain(int argc, _TCHAR* argv[])
  34. {
  35.     WSAData wsadata;
  36.     WSAStartup(0x0202, &wsadata);
  37.     SOCKET my_socket;
  38.     my_socket = socket(AF_INET, SOCK_STREAM, 0);
  39.     sockaddr_in local_addr;
  40.     local_addr.sin_family = AF_INET;
  41.     local_addr.sin_addr.S_un.S_addr = 0;
  42.     local_addr.sin_port = htons(5000);
  43.     if (bind(my_socket, (sockaddr *)&local_addr, sizeof(local_addr))) {
  44.         cout << "Error bind " << WSAGetLastError() << endl;
  45.         closesocket(my_socket);
  46.         WSACleanup();
  47.         return 1;
  48.     }
  49.     cout << "Port 5000 binded" << endl;
  50.     if (listen(my_socket, 16))
  51.     {
  52.         cout << "Error listen " << WSAGetLastError() << endl;
  53.         closesocket(my_socket);
  54.         WSACleanup();
  55.         return  1;
  56.     }
  57.     cout << "Listening port 5000" << endl;
  58.     SOCKET client_socket;
  59.     sockaddr_in client_addr;
  60.     int size = sizeof(client_addr);
  61.     while (client_socket = accept(my_socket, (sockaddr *) &client_addr, &size)) {
  62.         cout << "Client request accepted" << endl;
  63.         DWORD threadID;
  64.         CreateThread(NULL, NULL, client_processing, &client_socket, NULL, &threadID);
  65.     }
  66.     return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment