Created
February 12, 2026 18:36
-
-
Save vlaleli/aa9c58798a5b2741eb629f7b0f79c6bd to your computer and use it in GitHub Desktop.
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
| #include <iostream> | |
| #include <string> | |
| #include <cstring> | |
| #include <arpa/inet.h> | |
| #include <sys/socket.h> | |
| #include <unistd.h> | |
| int main() { | |
| int clientSocket = socket(AF_INET, SOCK_STREAM, 0); | |
| if (clientSocket < 0) { | |
| std::cout << "socket() failed\n"; | |
| return 1; | |
| } | |
| sockaddr_in serverAddr{}; | |
| serverAddr.sin_family = AF_INET; | |
| serverAddr.sin_port = htons(5555); | |
| inet_pton(AF_INET, "127.0.0.1", &serverAddr.sin_addr); | |
| if (connect(clientSocket, (sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) { | |
| std::cout << "connect() failed (server running?)\n"; | |
| close(clientSocket); | |
| return 1; | |
| } | |
| std::cout << "Connected to server.\n"; | |
| std::cout << "Type: як справи / котра година / exit\n\n"; | |
| while (true) { | |
| std::cout << "You: "; | |
| std::string text; | |
| std::getline(std::cin, text); | |
| std::string out = text + "\n"; | |
| send(clientSocket, out.c_str(), out.size(), 0); | |
| char buffer[1024]; | |
| std::memset(buffer, 0, sizeof(buffer)); | |
| ssize_t bytes = recv(clientSocket, buffer, sizeof(buffer) - 1, 0); | |
| if (bytes <= 0) { | |
| std::cout << "Server disconnected\n"; | |
| break; | |
| } | |
| std::string answer(buffer); | |
| while (!answer.empty() && (answer.back() == '\n' || answer.back() == '\r')) { | |
| answer.pop_back(); | |
| } | |
| std::cout << "Server: " << answer << "\n\n"; | |
| if (text == "exit") { | |
| break; | |
| } | |
| } | |
| close(clientSocket); | |
| 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
| #include <iostream> | |
| #include <string> | |
| #include <cstring> | |
| #include <ctime> | |
| #include <sys/socket.h> | |
| #include <netinet/in.h> | |
| #include <unistd.h> | |
| int main() { | |
| int serverSocket = socket(AF_INET, SOCK_STREAM, 0); | |
| if (serverSocket < 0) { | |
| std::cout << "socket() failed\n"; | |
| return 1; | |
| } | |
| int opt = 1; | |
| setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); | |
| sockaddr_in serverAddr{}; | |
| serverAddr.sin_family = AF_INET; | |
| serverAddr.sin_port = htons(5555); | |
| serverAddr.sin_addr.s_addr = INADDR_ANY; | |
| if (bind(serverSocket, (sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) { | |
| std::cout << "bind() failed\n"; | |
| close(serverSocket); | |
| return 1; | |
| } | |
| if (listen(serverSocket, 5) < 0) { | |
| std::cout << "listen() failed\n"; | |
| close(serverSocket); | |
| return 1; | |
| } | |
| std::cout << "Server listening on port 5555...\n"; | |
| std::cout << "Waiting for client...\n"; | |
| sockaddr_in clientAddr{}; | |
| socklen_t clientSize = sizeof(clientAddr); | |
| int clientSocket = accept(serverSocket, (sockaddr*)&clientAddr, &clientSize); | |
| if (clientSocket < 0) { | |
| std::cout << "accept() failed\n"; | |
| close(serverSocket); | |
| return 1; | |
| } | |
| std::cout << "Client connected!\n"; | |
| char buffer[1024]; | |
| while (true) { | |
| std::memset(buffer, 0, sizeof(buffer)); | |
| ssize_t bytes = recv(clientSocket, buffer, sizeof(buffer) - 1, 0); | |
| if (bytes <= 0) { | |
| std::cout << "Client disconnected\n"; | |
| break; | |
| } | |
| std::string msg(buffer); | |
| while (!msg.empty() && (msg.back() == '\n' || msg.back() == '\r')) { | |
| msg.pop_back(); | |
| } | |
| std::cout << "Client: " << msg << "\n"; | |
| std::string answer; | |
| if (msg == "exit") { | |
| answer = "bye"; | |
| std::string out = answer + "\n"; | |
| send(clientSocket, out.c_str(), out.size(), 0); | |
| break; | |
| } | |
| else if (msg == "як справи" || msg == "як справи?") { | |
| answer = "чудово"; | |
| } | |
| else if (msg == "котра година" || msg == "котра година?") { | |
| std::time_t t = std::time(nullptr); | |
| std::tm lt{}; | |
| localtime_r(&t, <); | |
| char timeBuf[6]; | |
| std::snprintf(timeBuf, sizeof(timeBuf), "%02d:%02d", lt.tm_hour, lt.tm_min); | |
| answer = timeBuf; | |
| } | |
| else { | |
| answer = "не розумію"; | |
| } | |
| std::string out = answer + "\n"; | |
| send(clientSocket, out.c_str(), out.size(), 0); | |
| } | |
| close(clientSocket); | |
| close(serverSocket); | |
| return 0; | |
| } | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment