socket is up
This commit is contained in:
parent
a522c5cb8f
commit
46df608d79
11
task_5/CMakeLists.txt
Normal file
11
task_5/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
project(hello-world-cpp-logger)
|
||||
|
||||
|
||||
add_library(socket_up STATIC socket_up.cpp)
|
||||
add_library(socket_handler STATIC socket_handler.cpp)
|
||||
|
||||
add_executable(main main.cpp)
|
||||
|
||||
target_link_libraries(main socket_up socket_handler)
|
36
task_5/main.cpp
Normal file
36
task_5/main.cpp
Normal file
@ -0,0 +1,36 @@
|
||||
#include "socket_up.h"
|
||||
#include "socket_handler.h"
|
||||
#include <iostream>
|
||||
|
||||
|
||||
int main() {
|
||||
|
||||
SOCKET listenSocket = SocketUp::config_socket_windows();
|
||||
|
||||
// 6. Принятие входящего соединения
|
||||
sockaddr_in clientAddr;
|
||||
int clientAddrSize = sizeof(clientAddr);
|
||||
SOCKET clientSocket = accept(listenSocket, (struct sockaddr*)&clientAddr, &clientAddrSize);
|
||||
if (clientSocket == INVALID_SOCKET) {
|
||||
std::cerr << "Accept failed with error: " << WSAGetLastError() << "\n";
|
||||
closesocket(listenSocket);
|
||||
WSACleanup();
|
||||
return 1;
|
||||
}
|
||||
std::cout << "Client connected!\n";
|
||||
|
||||
|
||||
// 7. Отправка данных клиенту
|
||||
const char* message = "new message from server!\n";
|
||||
int bytesSent = send(clientSocket, message, strlen(message), 0);
|
||||
if (bytesSent == SOCKET_ERROR) {
|
||||
std::cerr << "Send failed with error: " << WSAGetLastError() << "\n";
|
||||
closesocket(clientSocket);
|
||||
closesocket(listenSocket);
|
||||
WSACleanup();
|
||||
return 1;
|
||||
}
|
||||
std::cout << "Message sent to client.\n";
|
||||
|
||||
return 0;
|
||||
}
|
3
task_5/readme.md
Normal file
3
task_5/readme.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Here need to use flag -lws2_32
|
||||
|
||||
And I decide to make launch though ``make``
|
0
task_5/socket_handler.cpp
Normal file
0
task_5/socket_handler.cpp
Normal file
0
task_5/socket_handler.h
Normal file
0
task_5/socket_handler.h
Normal file
63
task_5/socket_up.cpp
Normal file
63
task_5/socket_up.cpp
Normal file
@ -0,0 +1,63 @@
|
||||
#include "socket_up.h"
|
||||
|
||||
|
||||
|
||||
// // Линковка библиотеки Winsock
|
||||
// #pragma comment(lib, "ws2_32.lib")
|
||||
// don't need but I think may shoot
|
||||
|
||||
SOCKET SocketUp::config_socket_windows() {
|
||||
// 1. Инициализация Winsock
|
||||
WSADATA wsaData;
|
||||
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
|
||||
std::cerr << "WSAStartup failed with error: " << WSAGetLastError() << "\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 2. Создание сокета
|
||||
SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (listenSocket == INVALID_SOCKET) {
|
||||
std::cerr << "Socket creation failed with error: " << WSAGetLastError() << "\n";
|
||||
WSACleanup();
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 3. Настройка адреса сокета
|
||||
sockaddr_in serverAddr;
|
||||
memset(&serverAddr, 0, sizeof(serverAddr));
|
||||
serverAddr.sin_family = AF_INET;
|
||||
serverAddr.sin_port = htons(8080); // Порт для привязки
|
||||
serverAddr.sin_addr.s_addr = INADDR_ANY; // Привязка к любому интерфейсу
|
||||
|
||||
// 4. Привязка сокета к адресу
|
||||
if (bind(listenSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {
|
||||
std::cerr << "Bind failed with error: " << WSAGetLastError() << "\n";
|
||||
closesocket(listenSocket);
|
||||
WSACleanup();
|
||||
return 1;
|
||||
}
|
||||
|
||||
// 5. Перевод сокета в режим прослушивания
|
||||
if (listen(listenSocket, SOMAXCONN) == SOCKET_ERROR) {
|
||||
std::cerr << "Listen failed with error: " << WSAGetLastError() << "\n";
|
||||
closesocket(listenSocket);
|
||||
WSACleanup();
|
||||
return 1;
|
||||
}
|
||||
std::cout << "Server is listening on port 8080...\n";
|
||||
|
||||
|
||||
return listenSocket;
|
||||
|
||||
|
||||
|
||||
// // 8. Закрытие клиентского сокета
|
||||
// closesocket(clientSocket);
|
||||
|
||||
// // 9. Закрытие серверного сокета и завершение Winsock
|
||||
// closesocket(listenSocket);
|
||||
// WSACleanup();
|
||||
|
||||
// std::cout << "Server shut down.\n";
|
||||
return 0;
|
||||
}
|
24
task_5/socket_up.h
Normal file
24
task_5/socket_up.h
Normal file
@ -0,0 +1,24 @@
|
||||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <cstring>
|
||||
#else
|
||||
#include <sys/socket.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
||||
class SocketUp {
|
||||
public:
|
||||
|
||||
#ifdef _WIN32
|
||||
static SOCKET config_socket_windows();
|
||||
#else
|
||||
// SOCKET?
|
||||
static SOCKET config_socket_unix();
|
||||
#endif
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user