Files
2023-10-13 14:01:41 +00:00

106 lines
2.3 KiB
C++

#include "tcp_client.h"
#ifdef LOG_TAG
#undef LOG_TAG
#endif
#define LOG_TAG "aiqtool"
TCPClient::TCPClient()
{
sock = -1;
port = 0;
address = "";
}
TCPClient::~TCPClient()
{
if (sock > 0) {
close(sock);
}
}
bool TCPClient::Setup(string address, int port)
{
if (sock == -1) {
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == -1) {
LOG_ERROR("Could not create socket\n");
}
}
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");
LOG_ERROR("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) {
LOG_ERROR("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) {
LOG_ERROR("Send failed : %s\n", data.c_str());
return false;
}
} else {
return false;
}
return true;
}
int TCPClient::Send(char* buff, int size)
{
int ret = -1;
if (sock != -1) {
ret = send(sock, buff, size, 0);
if (ret <= 0) {
LOG_ERROR("Send buff size %d failed\n", size);
return ret;
}
}
return ret;
}
string TCPClient::Receive(int size)
{
char buffer[size];
memset(&buffer[0], 0, sizeof(buffer));
string reply;
if (recv(sock, buffer, size, 0) < 0) {
LOG_ERROR("receive failed %s !\n", strerror(errno));
return "\0";
}
buffer[size - 1] = '\0';
reply = buffer;
return reply;
}
int TCPClient::Receive(char* buff, int size)
{
int ret = -1;
memset(buff, 0, size);
ret = recv(sock, buff, size, 0);
if (ret < 0) {
LOG_ERROR("receive failed %s !\n", strerror(errno));
return -1;
}
return ret;
}