// CN-lab1-server.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include #include #include #include #pragma comment(lib, "ws2_32.lib") using namespace std; DWORD WINAPI client_processing(LPVOID client_socket) { SOCKET my_socket; my_socket = ((SOCKET *)client_socket)[0]; char recv_buff[1024]; recv(my_socket, &recv_buff[0], sizeof(recv_buff) - 1, 0); string s(recv_buff), is_pal = "1"; for (int i = 0, l = s.length(); i <= l / 2; i++) { if (s[i] != s[l - 1 - i]) { is_pal[0] = '0'; break; } } char *send_buff = &is_pal[0]; send(my_socket, send_buff, sizeof(is_pal) - 1, 0); cout << "Connection closed" << endl; closesocket(my_socket); return 0; } int _tmain(int argc, _TCHAR* argv[]) { WSAData wsadata; WSAStartup(0x0202, &wsadata); SOCKET my_socket; my_socket = socket(AF_INET, SOCK_STREAM, 0); sockaddr_in local_addr; local_addr.sin_family = AF_INET; local_addr.sin_addr.S_un.S_addr = 0; local_addr.sin_port = htons(5000); if (bind(my_socket, (sockaddr *)&local_addr, sizeof(local_addr))) { cout << "Error bind " << WSAGetLastError() << endl; closesocket(my_socket); WSACleanup(); return 1; } cout << "Port 5000 binded" << endl; if (listen(my_socket, 16)) { cout << "Error listen " << WSAGetLastError() << endl; closesocket(my_socket); WSACleanup(); return 1; } cout << "Listening port 5000" << endl; SOCKET client_socket; sockaddr_in client_addr; int size = sizeof(client_addr); while (client_socket = accept(my_socket, (sockaddr *) &client_addr, &size)) { cout << "Client request accepted" << endl; DWORD threadID; CreateThread(NULL, NULL, client_processing, &client_socket, NULL, &threadID); } return 0; }