Compare commits
4 Commits
3a43f9d2bd
...
cd4eb82af2
| Author | SHA1 | Date | |
|---|---|---|---|
| cd4eb82af2 | |||
|
|
752eb89e72 | ||
|
|
4beabead01 | ||
|
|
0c29c50e23 |
@@ -6,36 +6,94 @@
|
||||
/* By: iherman- <iherman-@student.42malaga.com +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2026/05/06 17:19:12 by iherman- #+# #+# */
|
||||
/* Updated: 2026/05/06 18:22:36 by iherman- ### ########.fr */
|
||||
/* Updated: 2026/05/07 14:08:48 by iherman- ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "Server.hpp"
|
||||
|
||||
Server::Server()
|
||||
const int Server::kConnectionQueueLimit = 10;
|
||||
|
||||
Server::Server() :
|
||||
port_(PORT_DEFAULT),
|
||||
password_("")
|
||||
{
|
||||
std::cout << "Hello from server" << std::endl;
|
||||
// std::cout << "Hello from server" << std::endl;
|
||||
}
|
||||
|
||||
Server::Server(int port, const std::string& password)
|
||||
Server::Server(int port, const std::string& password) :
|
||||
port_(port),
|
||||
password_(password)
|
||||
{
|
||||
if (port < 1 || port > 65535)
|
||||
if (port_ < 1 || port_ > 65535)
|
||||
throw std::runtime_error("Invalid port");
|
||||
|
||||
std::cout << "Server port: " << port << "\nServer Password: " << password << std::endl;
|
||||
if (password_.empty())
|
||||
throw std::runtime_error("Empty password");
|
||||
|
||||
serverSocket_ = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (serverSocket_ < 0)
|
||||
throw std::runtime_error("Failed to create socket");
|
||||
|
||||
struct sockaddr_in addr;
|
||||
std::memset(&addr, 0, sizeof(addr));
|
||||
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_port = htons(port_);
|
||||
addr.sin_addr.s_addr = INADDR_ANY;
|
||||
|
||||
if (bind(serverSocket_, (struct sockaddr*)&addr, sizeof(addr)))
|
||||
throw std::runtime_error("Failed to bind");
|
||||
|
||||
if (listen(serverSocket_, kConnectionQueueLimit))
|
||||
throw std::runtime_error("Failed to listen");
|
||||
|
||||
std::cout << "Server port: " << port_
|
||||
<< "\nServer Password: " << password_
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
Server::~Server()
|
||||
{
|
||||
|
||||
close(serverSocket_);
|
||||
}
|
||||
|
||||
Server &Server::operator=(const Server& other)
|
||||
{
|
||||
if (this != &other)
|
||||
{
|
||||
std::cout << "operator= called" << std::endl;
|
||||
port_ = other.port_;
|
||||
serverSocket_ = other.serverSocket_;
|
||||
password_ = other.password_;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
void Server::run()
|
||||
{
|
||||
const std::size_t kBufferSize = 1024;
|
||||
char buffer[kBufferSize] = {0};
|
||||
|
||||
struct sockaddr_in client_addr;
|
||||
socklen_t client_addr_size = sizeof(client_addr);
|
||||
int clientSocket = accept(serverSocket_, (struct sockaddr*)&client_addr, &client_addr_size);
|
||||
|
||||
std::string message;
|
||||
while (true)
|
||||
{
|
||||
int recv_amount = recv(clientSocket, buffer, kBufferSize, 0);
|
||||
|
||||
if (recv_amount <= 0)
|
||||
break ;
|
||||
|
||||
message.append(buffer, recv_amount);
|
||||
|
||||
if (message.find('\n') != std::string::npos)
|
||||
break ;
|
||||
}
|
||||
|
||||
message = "Server received: " + message;
|
||||
send(clientSocket, message.c_str(), message.size(), 0);
|
||||
close(clientSocket);
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
/* By: iherman- <iherman-@student.42malaga.com +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2026/05/06 17:18:11 by iherman- #+# #+# */
|
||||
/* Updated: 2026/05/06 17:41:04 by iherman- ### ########.fr */
|
||||
/* Updated: 2026/05/07 13:29:00 by iherman- ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -36,11 +36,19 @@
|
||||
# include <iostream>
|
||||
|
||||
# include <string>
|
||||
# include <sstream>
|
||||
# include <cstring>
|
||||
|
||||
# define PORT_DEFAULT 9898
|
||||
|
||||
class Server
|
||||
{
|
||||
private:
|
||||
static const int kConnectionQueueLimit;
|
||||
|
||||
int port_;
|
||||
int serverSocket_;
|
||||
|
||||
std::string password_;
|
||||
|
||||
public:
|
||||
Server();
|
||||
@@ -48,6 +56,8 @@ class Server
|
||||
~Server();
|
||||
|
||||
Server &operator=(const Server& other);
|
||||
|
||||
void run();
|
||||
};
|
||||
|
||||
#endif // SERVER_HPP
|
||||
6
main.cpp
6
main.cpp
@@ -6,11 +6,12 @@
|
||||
/* By: iherman- <iherman-@student.42malaga.com +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2026/05/06 17:57:53 by iherman- #+# #+# */
|
||||
/* Updated: 2026/05/06 17:57:58 by iherman- ### ########.fr */
|
||||
/* Updated: 2026/05/07 13:28:09 by iherman- ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "Server/Server.hpp"
|
||||
#include <sstream>
|
||||
|
||||
int get_port(const char* arg)
|
||||
{
|
||||
@@ -38,12 +39,11 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
int port = get_port(argv[1]);
|
||||
Server server(port, argv[2]);
|
||||
server.run();
|
||||
}
|
||||
catch (std::exception& e)
|
||||
{
|
||||
std::cerr << e.what() << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// run server
|
||||
}
|
||||
Reference in New Issue
Block a user