Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save ExtremeFine21/389ccbfa7ca82575d9f73c127870e791 to your computer and use it in GitHub Desktop.

Select an option

Save ExtremeFine21/389ccbfa7ca82575d9f73c127870e791 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <cstring>
#include <unistd.h>
#include <arpa/inet.h>
using namespace std;
#define PORT 27015
#define BUFLEN 512
// ====================== СЕРВЕР ======================
void runServer() {
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
cerr << "Помилка створення сокета\n";
return;
}
sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(PORT);
if (bind(server_fd, (sockaddr*)&addr, sizeof(addr)) < 0) {
cerr << "Помилка bind\n";
return;
}
listen(server_fd, 1);
cout << "Сервер запущено. Очікування клієнта...\n";
socklen_t len = sizeof(addr);
int client = accept(server_fd, (sockaddr*)&addr, &len);
if (client < 0) {
cerr << "Помилка accept\n";
return;
}
cout << "Клієнт підключився.\n";
char buf[BUFLEN];
while (true) {
int n = read(client, buf, BUFLEN - 1);
if (n <= 0) break;
buf[n] = '\0';
int number = atoi(buf);
number = number + 1;
string response = to_string(number);
send(client, response.c_str(), response.size(), 0);
}
cout << "Клієнт відключився.\n";
close(client);
close(server_fd);
}
// ====================== КЛІЄНТ ======================
void runClient() {
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
cerr << "Помилка створення сокета\n";
return;
}
sockaddr_in serv{};
serv.sin_family = AF_INET;
serv.sin_port = htons(PORT);
inet_pton(AF_INET, "127.0.0.1", &serv.sin_addr);
if (connect(sock, (sockaddr*)&serv, sizeof(serv)) != 0) {
cerr << "Помилка підключення\n";
return;
}
cout << "Підключено до сервера.\n";
cout << "Введіть ціле число (exit для виходу):\n";
string input;
char buf[BUFLEN];
while (true) {
getline(cin, input);
if (input == "exit") break;
send(sock, input.c_str(), input.size(), 0);
int n = read(sock, buf, BUFLEN - 1);
if (n <= 0) break;
buf[n] = '\0';
cout << "Відповідь сервера: " << buf << "\n";
}
close(sock);
}
// ====================== MAIN ======================
int main() {
int choice;
cout << "Оберіть режим:\n";
cout << "1 - Сервер\n";
cout << "2 - Клієнт\n";
cout << "Ваш вибір: ";
cin >> choice;
cin.ignore();
if (choice == 1)
runServer();
else if (choice == 2)
runClient();
else
cout << "Невірний вибір\n";
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment