Environment: VC6 SP2, Windows 98 and NT
Introduction
Network Development Kit is a set of simple classes for a client-server
architecture. It contains 3 main classes : CServerObj, CClientObj and
CMessage. With just few method overrides, you have a complete robust client-server
application. This architecture is based on CSocket from MFC. You don’t have to
know how the TCP/IP protocol is implemented to build a client-server application with this
NDK. Because the NDK is based on the TCP/IP protocol, your client-server can run on
a local network or on the Internet without any change. I provide a simple example of
a client-server chat, also you can find another freeware based on the NDK at Net Blitz Homepage (a multiplayer
chess program that supports Bughouse).
NDK classes
CServerObj : Server side of client-server architecture.
Public interface
- CServerObj() – Construction.
- virtual ~CServerObj() – Destruction.
- BOOL Init(int port) – Initializes the port on which the server will listen.
- BOOL StartListening() – Effectively start the server.
- void Reset() – Resets the server and disconnect any user that might still be
connected.- void DisconnectUser(ID user) – Forces the disconnection of a user, given its
ID.- BOOL SendMessage(ID user, CMessage &msg) – Sends a message to particular
user.- BOOL SendMessageToAll(CMessage &msg) – Sends a message to every connected
user.- void DisconnectAll() – Disconnects every connected user.
- int GetPort() const – Returns the port
- int GetNbUsers() const – Returns the number of users connected
Protected interface
- virtual BOOL CanConnect() = 0 – Callback method that is called when a user
tries to connect to the server.- virtual void OnConnect(ID user) = 0 – Callback method that is called when a
user starts a connection to the server.- virtual void OnMessage(ID user, CMessage &msg) = 0 – Callback that is
called whenever any user sends a message to the server.- virtual void OnDisconnect(ID user) = 0 – Callback that gets called whenever a
user is disconnected for an external reason.CClientObj : Client side of client-server architecture.
Public interface
- CClientObj() – Construction.
- virtual ~CClientObj() – Destruction.
- BOOL OpenConnection(const CIp &ip, int port) – Opens a connection to the
server, given its IP address and the port number.- void CloseConnection() – Closes an established connection with the server.
- BOOL GetIpAndPort(CIp &ip, UINT &port) const – Retreives the IP
address and port number of the client.- BOOL SendMessage(CMessage &msg) – Sends a message through the network.
Protected interface
- virtual void OnMessage(CMessage &msg) = 0 – Callback method that gets
called when a message is received.- virtual void OnDisconnect(EDisconnectionType reason) = 0 – Callback method
that gets called whenever an unexpected disconnection occurs.CMessage : Data sent and received between CServerObj and CClientObj.
Public interface
- CMessage() – Construction.
- CMessage(int identifier) – Construction with a unique identifier.
- virtual ~CMessage() – Destruction.
- void SetIdentifier(int identifier) – Assigns a unique identifier to each
message.- int GetIdentifier() const – Obtains the identifier of this message.
- int GetNbElements() const – Returns the number of elements in the array of
this message.- void SetElementAt(int index, *Type value*) – Sets a basic element.
- void GetElementAt(int index, *Type &value*) const – Gets a basic element.
Sample usage
// Client side void CChatClientDlg::OnSendButton() { // Retreive the text typed by the user CString text; m_inputEdit.GetWindowText(text); m_inputEdit.SetWindowText(""); // Pack a message with the text to send CMessage msg(MSG_SEND_TEXT); msg.SetElementAt(0, text); // Send the message ((CChatClientApp*)AfxGetApp())->SendMessage(msg); } void CChatClientApp::OnMessage(CMessage &msg) { switch (msg.GetIdentifier()) { case MSG_RECEIVE_TEXT: { CString text; // Unpack message elements to retreive the text msg.GetElementAt(0, text); ((CChatClientDlg*)m_pMainWnd)->AddMessage(text); } break; } } // Server side void CChatServerApp::OnMessage(ID user, CMessage &msg) { switch (msg.GetIdentifier()) { case MSG_SEND_TEXT: { CString text; CString result; // Unpack message elements to retreive the text msg.GetElementAt(0, text); // Format the text to suit our needs result.Format("[User#%d] %s", user, text); // Send a text message to everyone CMessage msgToAll(MSG_RECEIVE_TEXT); msgToAll.SetElementAt(0, result); SendMessageToAll(msgToAll); } break; } }
I hope that this NDK will help you in programming your client-server application.
Downloads
Download demo project – 50 Kb
Download source – 15 Kb