simple_client-server/client.cpp

83 lines
1.8 KiB
C++
Raw Permalink Normal View History

2024-08-14 00:37:30 +03:00
#include <boost/date_time/posix_time/posix_time.hpp>
#include <chrono>
#include <iostream>
#include <netinet/in.h>
#include <string>
#include <sys/socket.h>
#include <thread>
#include <unistd.h>
using std::cerr;
using std::cout;
using std::endl;
using std::ofstream;
using std::stoi;
using std::string;
using std::thread;
#define DEBUG
class myClient {
string name;
unsigned short port;
unsigned short time;
sockaddr_in serverAddress;
int clientSocket;
public:
myClient(string name, unsigned short port, unsigned short time) {
this->name = name;
this->port = port;
this->time = time;
this->clientSocket = socket(AF_INET, SOCK_STREAM, 0);
this->serverAddress.sin_family = AF_INET;
this->serverAddress.sin_port = htons(port);
this->serverAddress.sin_addr.s_addr = INADDR_ANY;
if (connect(this->clientSocket, (sockaddr *)&serverAddress,
sizeof(serverAddress)) < 0) {
cerr << "Cannot connect to server!" << endl;
exit(-2);
}
thread t(&myClient::sendData, this);
t.join();
}
void sendData() {
while (1) {
std::this_thread::sleep_for(std::chrono::seconds(this->time));
send(this->clientSocket, this->name.c_str(), strlen(this->name.c_str()), 0);
}
}
~myClient() {
close(this->clientSocket);
}
};
int main(int argc, char *argv[]) {
if (argc < 4) {
cerr << "Usage: " << argv[0] << " [name] [port] [time(s)]." << endl;
exit(-1);
}
const string name = argv[1];
const unsigned short port = stoi(argv[2]);
const unsigned short time = stoi(argv[3]);
#ifdef DEBUG
cout << "[DEBUG] Starting a client with parameters: " << endl
<< "Name: " << name << endl
<< "Port: " << port << endl
<< "Time: " << time << endl;
#endif
myClient c(name, port, time);
while(1);
}