-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathclient.cpp
More file actions
58 lines (48 loc) · 1.25 KB
/
Copy pathclient.cpp
File metadata and controls
58 lines (48 loc) · 1.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "include/client.h"
Client::Client(std::string ip, int port) {
this->ip = ip;
this->port = port;
/* Criacao do socket */
sock = socket(AF_INET, SOCK_STREAM, 0);
/* Especifica o endereco para o socket*/
servAddress.sin_family = AF_INET;
servAddress.sin_port = htons(port); // precisa converter o inteiro para o tipo do atributo sin_port
if(inet_pton(AF_INET, ip.c_str(), &servAddress.sin_addr) <= 0) {
std::cerr << "Erro na conexao." << std::endl;
sock = -1;
exit(0);
}
}
// -1: erro, 0: bacana
int Client::createConnection() {
int ret = connect(sock, (struct sockaddr *) &servAddress, sizeof(servAddress));
if (ret == -1) {
sock = -1;
}
return ret;
}
std::string Client::receiveMessage() {
char msg[256];
fd_set set;
struct timeval timeout;
FD_ZERO(&set);
FD_SET(sock, &set);
timeout.tv_sec = TIMEOUT_SECS;
timeout.tv_usec = TIMEOUT_USECS;
int rv = select(sock + 1, &set, NULL, NULL, &timeout);
if(rv == 0) return "";
else {
recv(sock, &msg, sizeof(msg), 0); // recebe a mensagem passada pelo socket
return std::string(msg);
}
}
int Client::sendMessage(std::string msg) {
char men[256];
strcpy(men, msg.c_str());
return send(sock, men, sizeof(men), 0);
}
Client::~Client(){
if (sock != -1) {
::close(sock);
}
}