#include "SocketClient.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
using namespace std;
|
|
|
|
namespace exploringBB {
|
|
|
|
SocketClient::SocketClient(std::string serverName, int portNumber) {
|
|
this->socketfd = -1;
|
|
this->server = NULL;
|
|
this->serverName = serverName;
|
|
this->portNumber = portNumber;
|
|
this->isConnected = false;
|
|
}
|
|
|
|
int SocketClient::connectToServer(){
|
|
socketfd = socket(AF_INET, SOCK_STREAM, 0);
|
|
if (socketfd < 0){
|
|
perror("Socket Client: error opening socket.\n");
|
|
return 1;
|
|
}
|
|
server = gethostbyname(serverName.data());
|
|
if (server == NULL) {
|
|
perror("Socket Client: error - no such host.\n");
|
|
return 1;
|
|
}
|
|
bzero((char *) &serverAddress, sizeof(serverAddress));
|
|
serverAddress.sin_family = AF_INET;
|
|
bcopy((char *)server->h_addr,(char *)&serverAddress.sin_addr.s_addr, server->h_length);
|
|
serverAddress.sin_port = htons(portNumber);
|
|
|
|
if (connect(socketfd, (struct sockaddr *) &serverAddress, sizeof(serverAddress)) < 0){
|
|
perror("Socket Client: error connecting to the server.\n");
|
|
return 1;
|
|
}
|
|
this->isConnected = true;
|
|
return 0;
|
|
}
|
|
|
|
int SocketClient::send(std::string message){
|
|
const char *writeBuffer = message.data();
|
|
int length = message.length();
|
|
int n = write(this->socketfd, writeBuffer, length);
|
|
if (n < 0){
|
|
perror("Socket Client: error writing to socket");
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
string SocketClient::receive(int size=1024){
|
|
char readBuffer[size];
|
|
int n = read(this->socketfd, readBuffer, sizeof(readBuffer));
|
|
if (n < 0){
|
|
perror("Socket Client: error reading from socket");
|
|
}
|
|
return string(readBuffer);
|
|
}
|
|
|
|
int SocketClient::disconnectFromServer(){
|
|
this->isConnected = false;
|
|
close(this->socketfd);
|
|
return 0;
|
|
}
|
|
|
|
SocketClient::~SocketClient() {
|
|
if (this->isConnected == true){
|
|
disconnectFromServer();
|
|
}
|
|
}
|
|
}
|