Created
February 26, 2026 07:27
-
-
Save Vinnik67/ef49e18e06897107f598b324e88399c5 to your computer and use it in GitHub Desktop.
work task
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #define WIN32_LEAN_AND_MEAN | |
| #include <iostream> | |
| #include <string> | |
| #include <windows.h> | |
| #include <ws2tcpip.h> | |
| using namespace std; | |
| #pragma comment (lib, "Ws2_32.lib") | |
| #define DEFAULT_BUFLEN 512 | |
| #define DEFAULT_PORT "27015" | |
| #define PAUSE 1000 | |
| int main() { | |
| setlocale(0, ""); | |
| system("title CLIENT SIDE"); | |
| cout << "Client process started!\n"; | |
| Sleep(PAUSE); | |
| WSADATA wsaData; | |
| int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); | |
| if (iResult != 0) { | |
| cout << "WSAStartup failed with error: " << iResult << "\n"; | |
| return 11; | |
| } | |
| addrinfo hints{}; | |
| ZeroMemory(&hints, sizeof(hints)); | |
| hints.ai_family = AF_UNSPEC; | |
| hints.ai_socktype = SOCK_STREAM; | |
| hints.ai_protocol = IPPROTO_TCP; | |
| const char* ip = "localhost"; | |
| addrinfo* result = NULL; | |
| iResult = getaddrinfo(ip, DEFAULT_PORT, &hints, &result); | |
| if (iResult != 0) { | |
| cout << "getaddrinfo failed with error: " << iResult << "\n"; | |
| WSACleanup(); | |
| return 12; | |
| } | |
| SOCKET ConnectSocket = INVALID_SOCKET; | |
| for (addrinfo* ptr = result; ptr != NULL; ptr = ptr->ai_next) { | |
| ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol); | |
| if (ConnectSocket == INVALID_SOCKET) { | |
| cout << "socket failed with error: " << WSAGetLastError() << "\n"; | |
| WSACleanup(); | |
| return 13; | |
| } | |
| iResult = connect(ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen); | |
| if (iResult == SOCKET_ERROR) { | |
| closesocket(ConnectSocket); | |
| ConnectSocket = INVALID_SOCKET; | |
| continue; | |
| } | |
| break; | |
| } | |
| freeaddrinfo(result); | |
| if (ConnectSocket == INVALID_SOCKET) { | |
| cout << "Unable to connect to server. Please check if the server process is running!\n"; | |
| WSACleanup(); | |
| return 14; | |
| } | |
| cout << "Connection to server succeeded!\n"; | |
| Sleep(PAUSE); | |
| char answer[DEFAULT_BUFLEN]; | |
| string userInput; | |
| while (true) { | |
| cout << "Введіть ціле число (або 'exit' для виходу): "; | |
| getline(cin, userInput); | |
| if (userInput == "exit") { | |
| cout << "Завершення роботи клієнта.\n"; | |
| break; | |
| } | |
| // Отправка числа | |
| iResult = send(ConnectSocket, userInput.c_str(), (int)userInput.size(), 0); | |
| if (iResult == SOCKET_ERROR) { | |
| cout << "send failed with error: " << WSAGetLastError() << "\n"; | |
| break; | |
| } | |
| // Получение ответа | |
| iResult = recv(ConnectSocket, answer, DEFAULT_BUFLEN - 1, 0); | |
| if (iResult > 0) { | |
| answer[iResult] = '\0'; | |
| cout << "Відповідь сервера (число+1): " << answer << "\n"; | |
| } | |
| else if (iResult == 0) { | |
| cout << "Connection closed by server.\n"; | |
| break; | |
| } | |
| else { | |
| cout << "recv failed with error: " << WSAGetLastError() << "\n"; | |
| break; | |
| } | |
| } | |
| closesocket(ConnectSocket); | |
| WSACleanup(); | |
| cout << "Client process is shutting down!\n"; | |
| return 0; | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #define WIN32_LEAN_AND_MEAN | |
| #include <iostream> | |
| #include <string> | |
| #include <ws2tcpip.h> | |
| #include <windows.h> | |
| using namespace std; | |
| #pragma comment (lib, "Ws2_32.lib") | |
| #define DEFAULT_BUFLEN 512 | |
| #define DEFAULT_PORT "27015" | |
| #define PAUSE 1000 | |
| int main() { | |
| setlocale(0, ""); | |
| system("title SERVER SIDE"); | |
| cout << "Server process started!\n"; | |
| Sleep(PAUSE); | |
| WSADATA wsaData; | |
| int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); | |
| if (iResult != 0) { | |
| cout << "WSAStartup failed with error: " << iResult << "\n"; | |
| return 1; | |
| } | |
| addrinfo hints{}; | |
| hints.ai_family = AF_INET; | |
| hints.ai_socktype = SOCK_STREAM; | |
| hints.ai_protocol = IPPROTO_TCP; | |
| hints.ai_flags = AI_PASSIVE; | |
| addrinfo* result = NULL; | |
| iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result); | |
| if (iResult != 0) { | |
| cout << "getaddrinfo failed with error: " << iResult << "\n"; | |
| WSACleanup(); | |
| return 2; | |
| } | |
| SOCKET ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); | |
| if (ListenSocket == INVALID_SOCKET) { | |
| cout << "socket failed with error: " << WSAGetLastError() << "\n"; | |
| freeaddrinfo(result); | |
| WSACleanup(); | |
| return 3; | |
| } | |
| iResult = bind(ListenSocket, result->ai_addr, (int)result->ai_addrlen); | |
| if (iResult == SOCKET_ERROR) { | |
| cout << "bind failed with error: " << WSAGetLastError() << "\n"; | |
| freeaddrinfo(result); | |
| closesocket(ListenSocket); | |
| WSACleanup(); | |
| return 4; | |
| } | |
| freeaddrinfo(result); | |
| iResult = listen(ListenSocket, SOMAXCONN); | |
| if (iResult == SOCKET_ERROR) { | |
| cout << "listen failed with error: " << WSAGetLastError() << "\n"; | |
| closesocket(ListenSocket); | |
| WSACleanup(); | |
| return 5; | |
| } | |
| cout << "Listening... Run the client program!\n"; | |
| SOCKET ClientSocket = accept(ListenSocket, NULL, NULL); | |
| if (ClientSocket == INVALID_SOCKET) { | |
| cout << "accept failed with error: " << WSAGetLastError() << "\n"; | |
| closesocket(ListenSocket); | |
| WSACleanup(); | |
| return 6; | |
| } | |
| closesocket(ListenSocket); | |
| char message[DEFAULT_BUFLEN]; | |
| do { | |
| iResult = recv(ClientSocket, message, DEFAULT_BUFLEN - 1, 0); | |
| if (iResult > 0) { | |
| message[iResult] = '\0'; | |
| cout << "Client sent: " << message << "\n"; | |
| // Перетворюємо у число | |
| int number = stoi(message); | |
| int replyNumber = number + 1; | |
| string reply = to_string(replyNumber); | |
| int iSendResult = send(ClientSocket, reply.c_str(), (int)reply.size(), 0); | |
| if (iSendResult == SOCKET_ERROR) { | |
| cout << "send failed with error: " << WSAGetLastError() << "\n"; | |
| closesocket(ClientSocket); | |
| WSACleanup(); | |
| return 7; | |
| } | |
| } | |
| else if (iResult == 0) { | |
| cout << "Connection closing...\n"; | |
| } | |
| else { | |
| cout << "recv failed with error: " << WSAGetLastError() << "\n"; | |
| closesocket(ClientSocket); | |
| WSACleanup(); | |
| return 8; | |
| } | |
| } while (iResult > 0); | |
| shutdown(ClientSocket, SD_SEND); | |
| closesocket(ClientSocket); | |
| WSACleanup(); | |
| cout << "Server shutting down!\n"; | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment