#include "TCPClient.h"
|
|
TCPClient::TCPClient() {
|
sock = -1;
|
port = 0;
|
address = "";
|
}
|
|
bool TCPClient::setup(string address, int port) {
|
if (sock == -1) {
|
sock = socket(AF_INET, SOCK_STREAM, 0);
|
if (sock == -1) {
|
cout << "Could not create socket" << endl;
|
}
|
}
|
if ((signed) inet_addr(address.c_str()) == -1) {
|
struct hostent *he;
|
struct in_addr **addr_list;
|
if ((he = gethostbyname(address.c_str())) == NULL) {
|
herror("gethostbyname");
|
cout << "Failed to resolve hostname\n";
|
return false;
|
}
|
addr_list = (struct in_addr **) he->h_addr_list;
|
for (int i = 0; addr_list[i] != NULL; i++) {
|
server.sin_addr = *addr_list[i];
|
break;
|
}
|
} else {
|
server.sin_addr.s_addr = inet_addr(address.c_str());
|
}
|
server.sin_family = AF_INET;
|
server.sin_port = htons(port);
|
if (connect(sock, (struct sockaddr *) &server, sizeof(server)) < 0) {
|
perror("connect failed. Error");
|
return false;
|
}
|
return true;
|
}
|
|
bool TCPClient::Send(string data) {
|
if (sock != -1) {
|
if (send(sock, data.c_str(), strlen(data.c_str()), 0) < 0) {
|
cout << "Send failed : " << data << endl;
|
return false;
|
}
|
} else
|
return false;
|
return true;
|
}
|
|
string TCPClient::receive(int size) {
|
char buffer[size];
|
memset(&buffer[0], 0, sizeof(buffer));
|
|
string reply;
|
if (recv(sock, buffer, size, 0) < 0) {
|
cout << "receive failed!" << endl;
|
return nullptr;
|
}
|
buffer[size - 1] = '\0';
|
reply = buffer;
|
return reply;
|
}
|
|
string TCPClient::read() {
|
char buffer[1] = {};
|
buffer[0] = '\1';
|
string reply;
|
while (buffer[0] != '\0') {
|
if (recv(sock, buffer, sizeof(buffer), 0) < 0) {
|
cout << "receive failed!" << endl;
|
return string("-1");
|
}
|
reply += buffer[0];
|
}
|
return reply;
|
}
|
|
void TCPClient::exit() {
|
close(sock);
|
sock = -1;
|
}
|