From ac75e178ce448caab492b6a173080a1cb71d74ba Mon Sep 17 00:00:00 2001 From: Pontus Fransson Date: Tue, 19 Nov 2013 13:42:50 +0100 Subject: [PATCH] Sending a message from server to client (done and done) --- .../NetworkDependencies/Connection.cpp | 7 ++-- Code/Network/NetworkDependencies/Connection.h | 5 ++- .../Network/NetworkDependencies/IConnection.h | 27 +++++++------ Code/Network/OysterNetworkClient/Client.cpp | 28 +++++++++++++ Code/Network/OysterNetworkClient/Client.h | 26 +++++++++++++ .../OysterNetworkClient/ClientMain.cpp | 35 +++++++++++++++++ .../OysterNetworkClient.vcxproj | 4 ++ .../OysterNetworkClient.vcxproj.filters | 8 ++++ Code/Network/OysterNetworkServer/Client.cpp | 16 ++++++++ Code/Network/OysterNetworkServer/Client.h | 24 ++++++++++++ Code/Network/OysterNetworkServer/IListener.h | 16 ++++++++ Code/Network/OysterNetworkServer/Listener.cpp | 32 +++++++++++++++ Code/Network/OysterNetworkServer/Listener.h | 25 ++++++++++++ .../OysterNetworkServer.vcxproj | 7 ++++ .../OysterNetworkServer.vcxproj.filters | 17 ++++++++ .../OysterNetworkServer/ServerMain.cpp | 39 +++++++++++++++++++ 16 files changed, 299 insertions(+), 17 deletions(-) create mode 100644 Code/Network/OysterNetworkClient/Client.cpp create mode 100644 Code/Network/OysterNetworkClient/Client.h create mode 100644 Code/Network/OysterNetworkServer/Client.cpp create mode 100644 Code/Network/OysterNetworkServer/Client.h create mode 100644 Code/Network/OysterNetworkServer/IListener.h create mode 100644 Code/Network/OysterNetworkServer/Listener.cpp create mode 100644 Code/Network/OysterNetworkServer/Listener.h diff --git a/Code/Network/NetworkDependencies/Connection.cpp b/Code/Network/NetworkDependencies/Connection.cpp index 64111034..6fb70057 100644 --- a/Code/Network/NetworkDependencies/Connection.cpp +++ b/Code/Network/NetworkDependencies/Connection.cpp @@ -1,5 +1,8 @@ #include "Connection.h" +#include +#include + Connection::Connection() { mySocket = NULL; @@ -59,13 +62,11 @@ bool Connection::Connect(unsigned short port , const char serverName[]) //connection succesfull! return true; - - } bool Connection::InitiateServer(unsigned short port) { - int mySocket = socket(AF_INET, SOCK_STREAM, 0); + mySocket = socket(AF_INET, SOCK_STREAM, 0); if(mySocket == SOCKET_ERROR) { //Error opening socket! diff --git a/Code/Network/NetworkDependencies/Connection.h b/Code/Network/NetworkDependencies/Connection.h index 28804cb1..86ffda34 100644 --- a/Code/Network/NetworkDependencies/Connection.h +++ b/Code/Network/NetworkDependencies/Connection.h @@ -7,11 +7,11 @@ #include "IConnection.h" -class Connection : public IConnection +class Connection : public ::Oyster::Network::IConnection { private: int mySocket; - + public: Connection(); Connection(int socket); @@ -23,6 +23,7 @@ class Connection : public IConnection virtual bool Send(const char message[]); virtual int Recieve(char message[]); virtual int Listen(); + }; #endif \ No newline at end of file diff --git a/Code/Network/NetworkDependencies/IConnection.h b/Code/Network/NetworkDependencies/IConnection.h index fd3610fc..b986c381 100644 --- a/Code/Network/NetworkDependencies/IConnection.h +++ b/Code/Network/NetworkDependencies/IConnection.h @@ -5,18 +5,21 @@ #ifndef NETWORK_DEPENDENCIES_I_CONNECTION_H #define NETWORK_DEPENDENCIES_I_CONNECTION_H -#include -#include - -class IConnection +namespace Oyster { - public: - virtual bool Connect( unsigned short port, const char serverName[] ) = 0; - virtual bool InitiateServer( unsigned short port ) = 0; - virtual void Disconnect() = 0; - virtual bool Send( const char message[] ) = 0; - virtual int Recieve(char message[]) = 0; - virtual int Listen() = 0; -}; + namespace Network + { + class IConnection + { + public: + virtual void Disconnect() = 0; + virtual bool Send( const char message[] ) = 0; + virtual int Recieve(char message[]) = 0; + virtual bool InitiateServer( unsigned short port ) { return false; }; + virtual int Listen() { return -1; }; + virtual bool Connect( unsigned short port, const char serverName[] ) { return false; }; + }; + } +} #endif \ No newline at end of file diff --git a/Code/Network/OysterNetworkClient/Client.cpp b/Code/Network/OysterNetworkClient/Client.cpp new file mode 100644 index 00000000..a947beea --- /dev/null +++ b/Code/Network/OysterNetworkClient/Client.cpp @@ -0,0 +1,28 @@ +#include "Client.h" + +Client::Client() +{ + connection = new Connection(); +} + +Client::~Client() +{ + delete connection; +} + +bool Client::Connect(unsigned int port, char filename[]) +{ + connection->Connect(port, filename); + + return true; +} + +void Client::Send(char msg[]) +{ + connection->Send(msg); +} + +void Client::Recv(char msg[]) +{ + connection->Recieve(msg); +} \ No newline at end of file diff --git a/Code/Network/OysterNetworkClient/Client.h b/Code/Network/OysterNetworkClient/Client.h new file mode 100644 index 00000000..1fd9f1f6 --- /dev/null +++ b/Code/Network/OysterNetworkClient/Client.h @@ -0,0 +1,26 @@ +#ifndef NETWORK_CLIENT_CLIENT_H +#define NETWORK_CLIENT_CLIENT_H + +///////////////////////////////////////////////////////////////////// +// Created by Pontus 2013 +///////////////////////////////////////////////////////////////////// + +#include "../NetworkDependencies/Connection.h" + +class Client +{ +public: + Client(); + ~Client(); + + bool Connect(unsigned int port, char filename[]); + + void Send(char msg[]); + void Recv(char msg[]); + +private: + Connection* connection; + +}; + +#endif \ No newline at end of file diff --git a/Code/Network/OysterNetworkClient/ClientMain.cpp b/Code/Network/OysterNetworkClient/ClientMain.cpp index 0e14df6f..a3058900 100644 --- a/Code/Network/OysterNetworkClient/ClientMain.cpp +++ b/Code/Network/OysterNetworkClient/ClientMain.cpp @@ -1,10 +1,45 @@ #include +#include "Client.h" +#include using namespace std; +#pragma comment(lib, "ws2_32.lib") + +void ShutdownSockets(); +bool InitSockets(); int main() { + char msgRecv[255] = "\0"; + + InitSockets(); + cout << "Client" << endl; + //Create Client + Client client; + //Connect to server + client.Connect(9876, "127.0.0.1"); + + //Recieve message + client.Recv(msgRecv); + + //print message + cout << msgRecv << endl; + + ShutdownSockets(); + + system("pause"); return 0; +} + +bool InitSockets() +{ + WSADATA wsaData; + return WSAStartup(MAKEWORD(2, 2), &wsaData) == NO_ERROR; +} + +void ShutdownSockets() +{ + WSACleanup(); } \ No newline at end of file diff --git a/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj b/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj index 6d9b69b4..6bdc7921 100644 --- a/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj +++ b/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj @@ -149,8 +149,12 @@ + + + + diff --git a/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj.filters b/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj.filters index cd4a498b..2e5e9ef6 100644 --- a/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj.filters +++ b/Code/Network/OysterNetworkClient/OysterNetworkClient.vcxproj.filters @@ -18,5 +18,13 @@ Source Files + + Source Files + + + + + Header Files + \ No newline at end of file diff --git a/Code/Network/OysterNetworkServer/Client.cpp b/Code/Network/OysterNetworkServer/Client.cpp new file mode 100644 index 00000000..7c15984d --- /dev/null +++ b/Code/Network/OysterNetworkServer/Client.cpp @@ -0,0 +1,16 @@ +#include "Client.h" + +Client::Client(unsigned int socket) +{ + connection = new Connection(socket); +} + +Client::~Client() +{ + delete connection; +} + +void Client::Send(char buffer[]) +{ + connection->Send(buffer); +} \ No newline at end of file diff --git a/Code/Network/OysterNetworkServer/Client.h b/Code/Network/OysterNetworkServer/Client.h new file mode 100644 index 00000000..c72c7669 --- /dev/null +++ b/Code/Network/OysterNetworkServer/Client.h @@ -0,0 +1,24 @@ +#ifndef NETWORK_SERVER_CLIENT_H +#define NETWORK_SERVER_CLIENT_H + +///////////////////////////////////////////////////////////////////// +// Created by Pontus 2013 +///////////////////////////////////////////////////////////////////// + +#include "../NetworkDependencies/Connection.h" + +class Client +{ +public: + Client(unsigned int socket); + ~Client(); + + void Send(char buffer[]); + + +private: + Connection* connection; + +}; + +#endif \ No newline at end of file diff --git a/Code/Network/OysterNetworkServer/IListener.h b/Code/Network/OysterNetworkServer/IListener.h new file mode 100644 index 00000000..9a427f29 --- /dev/null +++ b/Code/Network/OysterNetworkServer/IListener.h @@ -0,0 +1,16 @@ +#ifndef NETWORK_SERVER_ILISTENER_H +#define NETWORK_SERVER_ILISTENER_H + +///////////////////////////////////////////////////////////////////// +// Created by Pontus 2013 +///////////////////////////////////////////////////////////////////// + +class IListener +{ +public: + virtual bool Init(unsigned int port) = 0; + virtual int Accept() = 0; + +}; + +#endif \ No newline at end of file diff --git a/Code/Network/OysterNetworkServer/Listener.cpp b/Code/Network/OysterNetworkServer/Listener.cpp new file mode 100644 index 00000000..7b340441 --- /dev/null +++ b/Code/Network/OysterNetworkServer/Listener.cpp @@ -0,0 +1,32 @@ +#include "Listener.h" + +Listener::Listener() +{ + +} + +Listener::~Listener() +{ + if(connection) + { + delete connection; + } +} + +bool Listener::Init(unsigned int port) +{ + connection = new Connection(); + + connection->InitiateServer(port); + + + return true; +} + +int Listener::Accept() +{ + int clientSocket = 0; + clientSocket = connection->Listen(); + + return clientSocket; +} \ No newline at end of file diff --git a/Code/Network/OysterNetworkServer/Listener.h b/Code/Network/OysterNetworkServer/Listener.h new file mode 100644 index 00000000..8e5f99b7 --- /dev/null +++ b/Code/Network/OysterNetworkServer/Listener.h @@ -0,0 +1,25 @@ +#ifndef NETWORK_SERVER_LISTENER_H +#define NETWORK_SERVER_LISTENER_H + +///////////////////////////////////////////////////////////////////// +// Created by Pontus 2013 +///////////////////////////////////////////////////////////////////// + +#include "IListener.h" +#include "../NetworkDependencies/Connection.h" + +class Listener +{ +public: + Listener(); + ~Listener(); + + bool Init(unsigned int port); + int Accept(); + +private: + Connection* connection; + +}; + +#endif \ No newline at end of file diff --git a/Code/Network/OysterNetworkServer/OysterNetworkServer.vcxproj b/Code/Network/OysterNetworkServer/OysterNetworkServer.vcxproj index 6dba87c1..94a6a6e1 100644 --- a/Code/Network/OysterNetworkServer/OysterNetworkServer.vcxproj +++ b/Code/Network/OysterNetworkServer/OysterNetworkServer.vcxproj @@ -149,8 +149,15 @@ + + + + + + + diff --git a/Code/Network/OysterNetworkServer/OysterNetworkServer.vcxproj.filters b/Code/Network/OysterNetworkServer/OysterNetworkServer.vcxproj.filters index f8025a15..1e38f641 100644 --- a/Code/Network/OysterNetworkServer/OysterNetworkServer.vcxproj.filters +++ b/Code/Network/OysterNetworkServer/OysterNetworkServer.vcxproj.filters @@ -18,5 +18,22 @@ Source Files + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + \ No newline at end of file diff --git a/Code/Network/OysterNetworkServer/ServerMain.cpp b/Code/Network/OysterNetworkServer/ServerMain.cpp index 10903cda..0fb81776 100644 --- a/Code/Network/OysterNetworkServer/ServerMain.cpp +++ b/Code/Network/OysterNetworkServer/ServerMain.cpp @@ -1,10 +1,49 @@ #include +#include +#include "Listener.h" +#include "Client.h" using namespace std; +#pragma comment(lib, "ws2_32.lib") + +void ShutdownSockets(); +bool InitSockets(); + int main() { cout << "Server" << endl; + if(!InitSockets()) + { + cout << "Sockets failed to initialize" << endl; + } + //Create socket + Listener listener; + listener.Init(9876); + + //Start listening + int clientSocket = listener.Accept(); + + //Accept a client + Client client(clientSocket); + + //Send a message to that client + client.Send("asd"); + + ShutdownSockets(); + + system("pause"); return 0; +} + +bool InitSockets() +{ + WSADATA wsaData; + return WSAStartup(MAKEWORD(2, 2), &wsaData) == NO_ERROR; +} + +void ShutdownSockets() +{ + WSACleanup(); } \ No newline at end of file