Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Last active March 5, 2026 07:40
Show Gist options
  • Select an option

  • Save sunmeat/d37480aef89b9d7eb294cecd0e30ff00 to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/d37480aef89b9d7eb294cecd0e30ff00 to your computer and use it in GitHub Desktop.
OOP TCP + OOP-threads: SERVER SIDE (windows 11)
#include <iostream>
#include <ws2tcpip.h>
#include <thread>
#include <string>
using namespace std;
#pragma comment (lib, "Ws2_32.lib")
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "27015"
#define PAUSE 1
class TcpServer {
SOCKET listenSocket = INVALID_SOCKET;
SOCKET clientSocket = INVALID_SOCKET;
addrinfo* result = nullptr;
public:
~TcpServer() {
if (clientSocket != INVALID_SOCKET) closesocket(clientSocket);
if (listenSocket != INVALID_SOCKET) closesocket(listenSocket);
if (result) freeaddrinfo(result);
WSACleanup();
}
bool initialize() {
WSADATA wsaData;
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
cerr << "WSAStartup впала: " << iResult << "\n";
return false;
}
addrinfo hints{};
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;
iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
if (iResult != 0) {
cerr << "getaddrinfo впала: " << iResult << "\n";
return false;
}
listenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
if (listenSocket == INVALID_SOCKET) {
cerr << "Не вдалося створити сокет: " << WSAGetLastError() << "\n";
return false;
}
iResult = bind(listenSocket, result->ai_addr, (int)result->ai_addrlen);
if (iResult == SOCKET_ERROR) {
cerr << "Bind впала: " << WSAGetLastError() << "\n";
return false;
}
iResult = listen(listenSocket, SOMAXCONN);
if (iResult == SOCKET_ERROR) {
cerr << "Listen впала: " << WSAGetLastError() << "\n";
return false;
}
clientSocket = accept(listenSocket, NULL, NULL);
if (clientSocket == INVALID_SOCKET) {
cerr << "Accept впала: " << WSAGetLastError() << "\n";
return false;
}
return true;
}
void sender() {
while (true) {
string message;
cout << "Введіть повідомлення для клієнта: ";
getline(cin, message);
int iSendResult = send(clientSocket, message.c_str(), message.length(), 0);
if (iSendResult == SOCKET_ERROR) {
cerr << "Send впала: " << WSAGetLastError() << "\n";
return;
}
Sleep(PAUSE);
}
}
void receiver() {
char recvbuf[DEFAULT_BUFLEN];
while (true) {
int iResult = recv(clientSocket, recvbuf, DEFAULT_BUFLEN, 0);
if (iResult > 0) {
recvbuf[iResult] = '\0';
cout << "\nКлієнт пише: " << recvbuf << "\n";
}
Sleep(PAUSE);
}
}
void run() {
thread sendThread(&TcpServer::sender, this);
thread receiveThread(&TcpServer::receiver, this);
sendThread.join();
receiveThread.join();
}
};
int main() {
setlocale(0, "");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
system("title СЕРВЕРНА СТОРОНА");
TcpServer server;
if (!server.initialize()) {
cerr << "Не вдалося ініціалізувати сервер.\n";
return 1;
}
server.run();
}
@sunmeat

sunmeat commented Mar 15, 2025

Copy link
Copy Markdown
Author

@sunmeat

sunmeat commented Mar 5, 2026

Copy link
Copy Markdown
Author

@sunmeat

sunmeat commented Mar 5, 2026

Copy link
Copy Markdown
Author

відключення дефендера віндовс:

  1. Натиснути Win + S → ввести Windows Security (або Захист Windows) → відкрити
  2. Зліва обирати App & browser control (або Керування програмами та браузером)
  3. Знизу або праворуч пошукати Smart App Control settings (або Параметри Smart App Control)
  4. Там буде перемикач → поставити Off (Вимкнено)
  5. Підтвердити, якщо запитає
  6. Після цього перезапустити комп'ютер (необов'язковий крок)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment