Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // HEADER
- #pragma once
- #include <cstdint>
- #include <unistd.h>
- #include <stdlib.h>
- #include <sys/socket.h>
- #include <sys/un.h>
- #include <cstring>
- #include <errno.h>
- #include <format>
- #include <string>
- #include "Log.h"
- #define CLIENT_SOCKET_PATH "test_program.client"
- #define SERVER_SOCKET_PATH "test_program.server"
- #define MSG_BUFFER_SIZE 256 // учитывая, что передается сумма, а не сама строка, 256 кажется достаточно объемным буфером
- class Client
- {
- public:
- void Init();
- void Send(int sum);
- ~Client();
- private:
- struct sockaddr_un m_clientAddr;
- struct sockaddr_un m_serverAddr;
- int m_clientSock = -1,
- m_len = -1,
- m_rc = -1;
- bool m_connected = false;
- char m_buffer[MSG_BUFFER_SIZE] = {0};
- };
- // CPP FILE
- #include "Client.h"
- void Client::Init()
- {
- Log::GetInstance().Trace("Begin client initialization");
- memset(&m_clientAddr, 0, sizeof(m_clientAddr));
- m_clientSock = socket(AF_UNIX, SOCK_STREAM, 0);
- if(m_clientSock == -1)
- {
- Log::GetInstance().Trace(std::format("Error opening client socket: {}", strerror(errno)));
- return;
- }
- else Log::GetInstance().Trace("Opened client socket");
- m_clientAddr.sun_family = AF_UNIX;
- strcpy(m_clientAddr.sun_path, CLIENT_SOCKET_PATH);
- m_len = sizeof(m_clientAddr);
- //unlink (CLIENT_SOCKET_PATH);
- m_rc = bind(m_clientSock, (struct sockaddr *)&m_clientAddr, m_len);
- if(m_rc == -1)
- {
- Log::GetInstance().Trace(std::format("Error binding the client: {}", strerror(errno)));
- close(m_clientSock);
- return;
- }
- else Log::GetInstance().Trace("Bound client");
- m_serverAddr.sun_family = AF_UNIX;
- strcpy(m_serverAddr.sun_path, SERVER_SOCKET_PATH);
- m_rc = connect(m_clientSock, (struct sockaddr*)&m_serverAddr, m_len);
- if(m_rc == -1)
- {
- Log::GetInstance().Trace(std::format("Error connecting the client: {}. Path: {}", strerror(errno), std::string(m_serverAddr.sun_path)));
- close(m_clientSock);
- return;
- }
- else
- {
- m_connected = true;
- Log::GetInstance().Trace("Connected client to the server");
- }
- }
- void Client::Send(int sum)
- {
- if(!m_connected)
- {
- Log::GetInstance().Trace("Failed to send data: client is not connected");
- return;
- }
- memset(m_buffer, 0, sizeof(m_buffer));
- std::string sumStr = std::to_string(sum);
- strcpy(m_buffer, sumStr.c_str());
- m_rc = send(m_clientSock, m_buffer, sizeof(m_buffer), 0);
- if(m_rc == -1)
- {
- Log::GetInstance().Trace(std::format("Error sending data from client: {}. fd: {}", strerror(errno), m_clientSock));
- close(m_clientSock);
- return;
- }
- Log::GetInstance().Trace(std::format("Client sent data ({}) to the server", sumStr));
- }
- Client::~Client()
- {
- close(m_clientSock);
- remove(CLIENT_SOCKET_PATH);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement