unsigned char instead of char and chat program with protocols

This commit is contained in:
Sam Mario Svensson 2013-11-22 08:54:26 +01:00
parent dcf456ce6d
commit 4142688f6c
10 changed files with 79 additions and 37 deletions

View File

@ -26,8 +26,8 @@ bool Connection::Connect(unsigned short port , const char serverName[])
} }
struct hostent *hostEntry; struct hostent *hostEnt;
if((hostEntry = gethostbyname(serverName)) == NULL) if((hostEnt = gethostbyname(serverName)) == NULL)
{ {
//couldn't find host //couldn't find host
return false; return false;
@ -35,7 +35,7 @@ bool Connection::Connect(unsigned short port , const char serverName[])
struct sockaddr_in server; struct sockaddr_in server;
server.sin_family = AF_INET; server.sin_family = AF_INET;
server.sin_port = htons(port); server.sin_port = htons(port);
server.sin_addr.s_addr = *(unsigned long*) hostEntry->h_addr; server.sin_addr.s_addr = *(unsigned long*) hostEnt->h_addr;
while(1) while(1)
{ {
@ -77,7 +77,7 @@ bool Connection::InitiateServer(unsigned short port)
return false; return false;
} }
//not our Listen function! //not our Listen function! its trying to keep our socket open for connections
if(listen(mySocket, 5) == SOCKET_ERROR) if(listen(mySocket, 5) == SOCKET_ERROR)
{ {
//"Listen failed! //"Listen failed!
@ -94,12 +94,13 @@ void Connection::Disconnect()
closesocket(mySocket); closesocket(mySocket);
} }
bool Connection::Send(const char message[]) bool Connection::Send(const unsigned char message[])
{ {
int nBytes; int nBytes;
unsigned long messageSize = strlen(message); unsigned long messageSize = strlen((char*)message);
messageSize = 18;
if((nBytes = send(mySocket, message , messageSize, 0)) == SOCKET_ERROR) nBytes = send(mySocket, (char*)message , messageSize, 0);
if(nBytes == SOCKET_ERROR)
{ {
//Send failed! //Send failed!
return false; return false;
@ -108,10 +109,10 @@ bool Connection::Send(const char message[])
return true; return true;
} }
int Connection::Recieve(char message[]) int Connection::Recieve(unsigned char message[])
{ {
int nBytes; int nBytes;
nBytes = recv(mySocket, message , 255, 0); nBytes = recv(mySocket, (char*)message , 255, 0);
if(nBytes == SOCKET_ERROR) if(nBytes == SOCKET_ERROR)
{ {
//Recv failed //Recv failed

View File

@ -21,9 +21,12 @@ namespace Oyster
virtual bool Connect( unsigned short port , const char serverName[] ); virtual bool Connect( unsigned short port , const char serverName[] );
virtual bool InitiateServer( unsigned short port ); virtual bool InitiateServer( unsigned short port );
virtual void Disconnect(); virtual void Disconnect();
virtual bool Send(const char message[]);
virtual int Recieve(char message[]); virtual bool Send(const unsigned char message[]);
virtual int Recieve(unsigned char message[]);
virtual int Listen(); virtual int Listen();
private: private:

View File

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

View File

@ -32,6 +32,14 @@ namespace Oyster
std::string textMessage; std::string textMessage;
ProtocolTest() { this->packageType = package_type_test; } ProtocolTest() { this->packageType = package_type_test; }
}; };
/*struct Prutt
{
PackageType t;
union PRUTT
{
ProtocolTest *ptest,
};
};*/
} }
} }
} }

View File

@ -19,12 +19,12 @@ bool Client::Connect(unsigned int port, char filename[])
return true; return true;
} }
void Client::Send(char msg[]) void Client::Send(unsigned char msg[])
{ {
connection->Send(msg); connection->Send(msg);
} }
void Client::Recv(char msg[]) void Client::Recv(unsigned char msg[])
{ {
connection->Recieve(msg); connection->Recieve(msg);
} }

View File

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

View File

@ -1,10 +1,14 @@
#include <iostream> #include <iostream>
#include "Client.h" #include "Client.h"
#include <WinSock2.h> #include <WinSock2.h>
#include "..\NetworkDependencies\Translator.h"
using namespace std; using namespace std;
using namespace Oyster::Network::Protocols;;
using namespace Oyster::Network::Client; using namespace Oyster::Network::Client;
#pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "ws2_32.lib")
void ShutdownSockets(); void ShutdownSockets();
bool InitSockets(); bool InitSockets();
void chat(Client client); void chat(Client client);
@ -23,7 +27,6 @@ int main()
//Connect to server //Connect to server
client.Connect(9876, "10.0.0.3"); client.Connect(9876, "10.0.0.3");
chat(client); chat(client);
//Recieve message //Recieve message
@ -51,8 +54,13 @@ void ShutdownSockets()
void chat(Client client) void chat(Client client)
{ {
char msgRecv[255] = "\0"; Oyster::Network::Translator *t = new Oyster::Network::Translator();
char msgSend[255] = "\0";
unsigned char msgRecv[255] = "\0";
string msgSend = "";
ProtocolHeader header;
ProtocolTest test;
bool chatDone = false; bool chatDone = false;
@ -60,22 +68,44 @@ void chat(Client client)
{ {
client.Recv(msgRecv); client.Recv(msgRecv);
cout<< "Client 2: " << msgRecv << endl; header = t->Translate(msgRecv);
cin.getline(msgSend , 255 , '\n'); switch(header.packageType)
if(strlen(msgSend) < 1)
{ {
strcpy_s(msgSend , " "); case package_type_header:
break;
case package_type_test:
cout <<"Client 2: " <<((ProtocolTest*)&header)->textMessage <<endl;
break;
}
std::getline(std::cin, msgSend);
std::cin.clear();
if(msgSend.length() < 1)
{
//memcpy(msgSend, " " , 1);
msgSend = " ";
//strcpy_s((char)msgSend , " ");
} }
if( msgSend != "exit") if( msgSend != "exit")
{ {
if(strlen(msgSend) < 1) if(msgSend.length() < 1)
{ {
strcpy_s(msgSend, "ERROR"); //memcpy(msgSend, "ERROR" , 5);
msgSend = "ERROR!";
//strcpy_s(msgSend, "ERROR");
} }
client.Send(msgSend);
test.packageType = package_type_test;
test.size = msgSend.length();
test.textMessage = msgSend;
unsigned char *message = t->Translate(test);
client.Send(message);
} }
else else

View File

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

View File

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

View File

@ -59,7 +59,7 @@ int main()
Client client2(clientSocket); Client client2(clientSocket);
cout << "Second client connected." << endl; cout << "Second client connected." << endl;
client1.Send("Hej"); client1.Send((unsigned char*) "Hej");
while(1) while(1)
{ {