ErrorMessages everywhere!

This commit is contained in:
Sam Mario Svensson 2013-11-26 13:45:03 +01:00
parent 45c145439a
commit f6ade9e4fd
11 changed files with 116 additions and 82 deletions

View File

@ -2,6 +2,7 @@
#include <winsock2.h> #include <winsock2.h>
#include <iostream> #include <iostream>
#include <string>
using namespace Oyster::Network; using namespace Oyster::Network;
@ -10,13 +11,12 @@ Connection::~Connection()
closesocket( this->socket ); closesocket( this->socket );
} }
bool Connection::Connect(unsigned short port , const char serverName[]) int Connection::Connect(unsigned short port , const char serverName[])
{ {
struct hostent *hostEnt; struct hostent *hostEnt;
if((hostEnt = gethostbyname(serverName)) == NULL) if((hostEnt = gethostbyname(serverName)) == NULL)
{ {
//couldn't find host return WSAGetLastError();
return false;
} }
struct sockaddr_in server; struct sockaddr_in server;
@ -26,20 +26,20 @@ bool Connection::Connect(unsigned short port , const char serverName[])
if(connect(this->socket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) if(connect(this->socket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
{ {
//Error connecting to server return WSAGetLastError();
return false;
} }
//connection succesfull! //connection succesfull!
return true; return 0;
} }
bool Connection::InitiateServer(unsigned short port) int Connection::InitiateServer(unsigned short port)
{ {
if(!initiateSocket()) int errorCode = 0;
if((errorCode = initiateSocket()) != 0)
{ {
//Error opening socket! return errorCode;
return false;
} }
struct sockaddr_in server; struct sockaddr_in server;
@ -49,39 +49,38 @@ bool Connection::InitiateServer(unsigned short port)
if(bind(this->socket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR) if(bind(this->socket, (sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)
{ {
//Bind failed!; errorCode = WSAGetLastError();
closesocket(this->socket); closesocket(this->socket);
return false; return errorCode;
} }
//not our Listen function! its trying to keep our socket open for connections //not our Listen function! its trying to keep our socket open for connections
if(listen(this->socket, 5) == SOCKET_ERROR) if(listen(this->socket, 5) == SOCKET_ERROR)
{ {
//"Listen failed! errorCode = WSAGetLastError();
closesocket(this->socket); closesocket(this->socket);
return false; return errorCode;
} }
//Server started! //Server started!
return true; return 0;
} }
bool Connection::InitiateClient() int Connection::InitiateClient()
{ {
if(!initiateSocket()) int errorCode;
{ return initiateSocket();
return false;
}
return true;
} }
void Connection::Disconnect() int Connection::Disconnect()
{ {
closesocket(this->socket); closesocket(this->socket);
return WSAGetLastError();
} }
bool Connection::Send(const unsigned char message[]) int Connection::Send(const unsigned char message[])
{ {
int nBytes; int nBytes;
unsigned long messageSize = strlen((char*)message); unsigned long messageSize = strlen((char*)message);
@ -90,13 +89,10 @@ bool Connection::Send(const unsigned char message[])
nBytes = send(this->socket, (char*)message , messageSize, 0); nBytes = send(this->socket, (char*)message , messageSize, 0);
if(nBytes == SOCKET_ERROR) if(nBytes == SOCKET_ERROR)
{ {
//Send failed! return WSAGetLastError();
return false;
} }
std::cout << "Size of the sent data: " << nBytes << " bytes" << std::endl; return 0;
return true;
} }
int Connection::Recieve(unsigned char message[]) int Connection::Recieve(unsigned char message[])
@ -106,27 +102,20 @@ int Connection::Recieve(unsigned char message[])
nBytes = recv(this->socket, (char*)message, 1600, 0); nBytes = recv(this->socket, (char*)message, 1600, 0);
if(nBytes == SOCKET_ERROR) if(nBytes == SOCKET_ERROR)
{ {
//Recv failed return WSAGetLastError();
return -1;
} }
message[nBytes] = '\0'; message[nBytes] = '\0';
return 1; return 0;
} }
int Connection::Listen() int Connection::Listen()
{ {
int optlen = sizeof(int);
int optval;
int Return = getsockopt(this->socket, SOL_SOCKET, SO_MAX_MSG_SIZE, (char *)&optval, &optlen);
std::cout << optval << std::endl;
int clientSocket; int clientSocket;
if((clientSocket = accept(this->socket, NULL, NULL)) == INVALID_SOCKET) if((clientSocket = accept(this->socket, NULL, NULL)) == INVALID_SOCKET)
{ {
//failed return WSAGetLastError();
return -1;
} }
return clientSocket; return clientSocket;
@ -135,14 +124,13 @@ int Connection::Listen()
/////////////////////////////////////// ///////////////////////////////////////
//Private functions //Private functions
/////////////////////////////////////// ///////////////////////////////////////
bool Connection::initiateSocket() int Connection::initiateSocket()
{ {
this->socket = ::socket(AF_INET, SOCK_STREAM, 0); this->socket = ::socket(AF_INET, SOCK_STREAM, 0);
if(this->socket == SOCKET_ERROR) if(this->socket == SOCKET_ERROR)
{ {
//error opening socket return WSAGetLastError();
return false;
} }
return true; return 0;
} }

View File

@ -19,18 +19,18 @@ namespace Oyster
Connection(int socket) { this->socket = socket; }; Connection(int socket) { this->socket = socket; };
virtual ~Connection(); virtual ~Connection();
virtual bool InitiateServer( unsigned short port ); virtual int InitiateServer( unsigned short port );
virtual bool InitiateClient(); virtual int InitiateClient();
virtual bool Send(const unsigned char message[]); virtual int Send(const unsigned char message[]);
virtual int Recieve(unsigned char message[]); virtual int Recieve(unsigned char message[]);
virtual void Disconnect(); virtual int Disconnect();
virtual bool Connect( unsigned short port , const char serverName[] ); virtual int Connect( unsigned short port , const char serverName[] );
virtual int Listen(); virtual int Listen();
private: private:
bool initiateSocket(); int initiateSocket();
int socket; int socket;

View File

@ -13,13 +13,13 @@ namespace Oyster
{ {
public: public:
virtual void Disconnect() = 0; virtual int Disconnect() = 0;
virtual bool Send( const unsigned char message[] ) = 0; virtual int Send( const unsigned char message[] ) = 0;
virtual int Recieve(unsigned char message[]) = 0; virtual int Recieve(unsigned char message[]) = 0;
virtual bool InitiateServer( unsigned short port ) { return false; }; virtual int InitiateServer( unsigned short port ) { return false; };
virtual bool InitiateClient() { return false; }; virtual int InitiateClient() { return false; };
virtual int Listen() { return -1; }; virtual int Listen() { return -1; };
virtual bool Connect( unsigned short port, const char serverName[] ) { return false; }; virtual int Connect( unsigned short port, const char serverName[] ) { return false; };
}; };
} }
} }

View File

@ -1,13 +1,37 @@
#include "WinsockFunctions.h" #include "WinsockFunctions.h"
#include <WinSock2.h> #include <WinSock2.h>
bool InitSockets() bool InitWinSock()
{ {
WSADATA wsaData; WSADATA wsaData;
return WSAStartup(MAKEWORD(2, 2), &wsaData) == NO_ERROR; return WSAStartup(MAKEWORD(2, 2), &wsaData) == NO_ERROR;
} }
void ShutdownSockets() void ShutdownWinSock()
{ {
WSACleanup(); WSACleanup();
} }
std::wstring GetErrorMessage(int errorCode)
{
LPWSTR lpMessage;
std::wstring retVal(L"Succesful");
DWORD bufLen = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS ,
NULL,
errorCode ,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) ,
(LPWSTR)&lpMessage,
0 ,
NULL );
if(bufLen)
{
retVal = lpMessage;
LocalFree(lpMessage);
return retVal;
}
}

View File

@ -4,8 +4,12 @@
///////////////////////////////////// /////////////////////////////////////
// Created by Pontus Fransson 2013 // // Created by Pontus Fransson 2013 //
///////////////////////////////////// /////////////////////////////////////
#include <string>
void ShutdownSockets();
bool InitSockets(); void ShutdownWinSock();
bool InitWinSock();
std::wstring GetErrorMessage(int errorCode);
#endif #endif

View File

@ -13,20 +13,29 @@ Client::~Client()
connection = 0; connection = 0;
} }
bool Client::Connect(unsigned int port, char filename[]) int Client::Connect(unsigned int port, char filename[])
{ {
connection->InitiateClient(); int errorCode;
connection->Connect(port, filename);
return true; if((errorCode = connection->InitiateClient()) != 0)
{
return errorCode;
}
if((errorCode = connection->Connect(port, filename)) != 0)
{
return errorCode;
}
return 0;
} }
void Client::Send(unsigned char msg[]) int Client::Send(unsigned char msg[])
{ {
connection->Send(msg); return connection->Send(msg);
} }
void Client::Recv(unsigned char msg[]) int Client::Recv(unsigned char msg[])
{ {
connection->Recieve(msg); return connection->Recieve(msg);
} }

View File

@ -19,10 +19,10 @@ namespace Oyster
Client(); Client();
~Client(); ~Client();
bool Connect(unsigned int port, char filename[]); int Connect(unsigned int port, char filename[]);
void Send(unsigned char msg[]); int Send(unsigned char msg[]);
void Recv(unsigned char msg[]); int Recv(unsigned char msg[]);
private: private:
::Oyster::Network::Connection* connection; ::Oyster::Network::Connection* connection;

View File

@ -2,8 +2,8 @@
#include <WinSock2.h> #include <WinSock2.h>
#include <vld.h> #include <vld.h>
#include "../NetworkDependencies/WinsockFunctions.h" #include "../NetworkDependencies/WinsockFunctions.h"
#include "..\NetworkDependencies\Translator.h" #include "../NetworkDependencies/Translator.h"
#include "..\NetworkDependencies\Protocols.h" #include "../NetworkDependencies/Protocols.h"
#include "Client.h" #include "Client.h"
#pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "ws2_32.lib")
@ -16,9 +16,11 @@ void chat(Client &client);
int main() int main()
{ {
int errorCode;
char msgRecv[255] = "\0"; char msgRecv[255] = "\0";
InitSockets(); InitWinSock();
cout << "Client" << endl; cout << "Client" << endl;
@ -26,11 +28,17 @@ int main()
Client client; Client client;
//Connect to server //Connect to server
client.Connect(9876, "localhost"); errorCode = client.Connect(9876, "localhost");
if(errorCode != 0)
{
wstring errorTest = GetErrorMessage(errorCode);
wcout << "errorMessage: " << errorTest << endl;
}
chat(client); chat(client);
ShutdownSockets(); ShutdownWinSock();
system("pause"); system("pause");
return 0; return 0;

View File

@ -12,12 +12,12 @@ Client::~Client()
delete connection; delete connection;
} }
void Client::Send(unsigned char buffer[]) int Client::Send(unsigned char buffer[])
{ {
connection->Send(buffer); return connection->Send(buffer);
} }
void Client::Recv(unsigned char buffer[]) int Client::Recv(unsigned char buffer[])
{ {
connection->Recieve(buffer); return connection->Recieve(buffer);
} }

View File

@ -19,8 +19,8 @@ namespace Oyster
Client(unsigned int socket); Client(unsigned int socket);
~Client(); ~Client();
void Send(unsigned char buffer[]); int Send(unsigned char buffer[]);
void Recv(unsigned char buffer[]); int Recv(unsigned char buffer[]);
private: private:
::Oyster::Network::Connection* connection; ::Oyster::Network::Connection* connection;

View File

@ -18,10 +18,11 @@ int main()
unsigned char* recvBuffer = new unsigned char[1601]; unsigned char* recvBuffer = new unsigned char[1601];
cout << "Server" << endl; cout << "Server" << endl;
Translator t; Translator t;
int errorCode;
if(!InitSockets()) if(!InitWinSock())
{ {
cout << "Sockets failed to initialize" << endl; cout << "errorMessage: unable to start winsock" << endl;
} }
//Create socket //Create socket
@ -84,7 +85,7 @@ int main()
client1.Send(recvBuffer); client1.Send(recvBuffer);
} }
ShutdownSockets(); ShutdownWinSock();
delete[] recvBuffer; delete[] recvBuffer;
delete set; delete set;