Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // CN-lab1-server.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <winsock2.h>
- #include <iostream>
- #include <thread>
- #include <string>
- #pragma comment(lib, "ws2_32.lib")
- using namespace std;
- int client_process(SOCKET sock) {
- sockaddr_in client_addr;
- int client_addr_size = sizeof(client_addr);
- SOCKET client_sock = accept(sock, (sockaddr *)&client_addr, &client_addr_size);
- if (client_sock == INVALID_SOCKET) {
- int wsa_error = WSAGetLastError();
- if (wsa_error != 10004)
- cout << "Accept error " << WSAGetLastError() << endl;
- return 0;
- }
- cout << "Client connected" << endl;
- while (true) {
- char recv_buff[1024];
- int len = recv(client_sock, &recv_buff[0], sizeof(recv_buff) - 1, 0);
- recv_buff[len] = '\0';
- string s = recv_buff, is_pal = "1";
- if (s == "&close")
- break;
- cout << "Request received" << endl;
- for (int i = 0; i <= s.length() / 2; i++) {
- if (s[i] != s[s.length() - 1 - i]) {
- is_pal[0] = '0';
- break;
- }
- }
- send(client_sock, is_pal.c_str(), is_pal.length(), 0);
- cout << "Answer sent" << endl;
- }
- closesocket(client_sock);
- cout << "Client disconnected" << endl;
- return 0;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- cout << "cn-lab1 var10 server start" << endl;
- WSAData wsadata;
- WSAStartup(0x0202, &wsadata);
- SOCKET sock;
- sock = socket(AF_INET, SOCK_STREAM, 0);
- if (sock == INVALID_SOCKET) {
- cout << "Create socket error " << WSAGetLastError() << endl;
- WSACleanup();
- return 1;
- }
- cout << "Main socket created successfully" << endl;
- sockaddr_in local_addr;
- local_addr.sin_family = AF_INET;
- local_addr.sin_addr.S_un.S_addr = 0;
- local_addr.sin_port = htons(5001);
- if (::bind(sock, (sockaddr *) &local_addr, sizeof(local_addr))) {
- cout << "Bind error " << WSAGetLastError() << endl;
- closesocket(sock);
- WSACleanup();
- return 2;
- }
- cout << "Port 5001 bound" << endl;
- if (listen(sock, 16))
- {
- cout << "Listen error " << WSAGetLastError() << endl;
- closesocket(sock);
- WSACleanup();
- return 3;
- }
- cout << "Listening port 5001" << endl;
- thread client(client_process, ref(sock));
- string s;
- do {
- cin >> s;
- } while (s != "stop" && s != "exit");
- closesocket(sock);
- if (client.joinable())
- client.join();
- WSACleanup();
- cout << "cn-lab1 var10 server stopped" << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment