![]() |
General Programming »
Internet / Network »
Client/Server Development
Intermediate
License: The Code Project Open License (CPOL)
Network Development Kit 2.0By Sebastien_LachanceNetwork Development Kit is a set of simple classes for a client-server architecture. |
VC6, VC7.1Win2K, MFC, VS.NET2003, Dev
|
|
Advanced Search |
|
|
|
||||||||||||||||
With the success of NDK 1.0, I decided to improve the functionality. NDK represents Network Development Kit. The NDK is a set of classes that implements a client/server architecture. The NDK hides all the complexity of the connection, sending, and receiving of data over a network. You only have to deal with three classes: CNDKServer, CNDKClient, and CNDKMessage. With just a few methods to override, you obtain a complete robust client/server application. The NDK is based on the class CSocket from MFC, so you can run your application on a local network or on the Internet without any change. To easily understand the integration of the NDK in an application, you'll find at the end of this article a complete chat application.
CNDKServer: Server side of the client/server architecture
Attributes:
BOOL IsStarted() const;long GetPort() const;long GetNbUsers() const;void GetUserIds(CLongArray& alIds) const;Operations:
BOOL StartListening(long lPort);void Stop();BOOL SendMessageToUser(long lUserId, CNDKMessage& message);BOOL SendMessageToAllUsers(CNDKMessage& message);BOOL SendMessageToSomeUsers(const CLongArray& alUserIds, CNDKMessage& message);BOOL SendMessageToAllUsersExceptFor(long lUserId, CNDKMessage& message);BOOL SendMessageToAllUsersExceptFor(const CLongArray& alUserIds, CNDKMessage& message);BOOL DisconnectUser(long lUserId);void DisconnectAllUsers();BOOL PingUser(long lUserId);void PingAllUsers();Callbacks:
virtual BOOL OnIsConnectionAccepted() = 0;virtual void OnConnect(long lUserId) = 0;virtual void OnMessage(long lUserId, CNDKMessage& message) = 0;virtual void OnDisconnect(long lUserId, NDKServerDisconnection disconnectionType) = 0;virtual void OnPing(long lUserId, long lNbMilliseconds);CNDKClient: Client side of the client/server architecture
Attributes:
BOOL IsConnected() const;BOOL GetIpAndPort(CString& strIp, long& lPort) const;Operations:
BOOL OpenConnection(const CString& strServerIp, long lPort);void CloseConnection();BOOL SendMessageToServer(CNDKMessage& message);BOOL PingServer();Callbacks:
virtual void OnMessage(CNDKMessage& message) = 0;virtual void OnDisconnect(NDKClientDisconnection disconnectionType) = 0;virtual void OnPing(long lNbMilliseconds);CNDKMessage: Encapsulation of the data that is sent and received by CNDKServer and CNDKClient
Attributes:
void SetId(long lId);long GetId() const;int GetNbElements() const;Operations:
void Add(TYPE typeData);void SetAt(long lIndex, TYPE typeData);void GetAt(long lIndex, TYPE& typeData) const;void GetNext(TYPE& typeData);Where
TYPEcan be aUCHAR,char,USHORT,short,UINT,int,long,float,double,CString, orLPVOIDdata.
CNDKServer notifies automatically CNDKClient when it disconnects and vice-versa
CNDKServer has new methods to send a message to a group of users
CNDKMessage is easier to use and more robust
Here are two screenshots of the chat application. Most features of the NDK are shown in both programs.


void CChatClientDlg::OnButtonSend() { if (UpdateData(TRUE)) { // Create the message with a unique Id: ChatText CNDKMessage message(ChatText); // Add the data into the message message.Add(m_strChatInput); // Send the message to the server SendMessageToServer(message); // Update the UI of the dialog AddText(m_strChatInput); m_strChatInput.Empty(); UpdateData(FALSE); } }
void CChatServerDlg::OnMessage(long lUserId, CNDKMessage& message) { switch (message.GetId()) { //... case ChatText: { CString strNickname; // Obtain the nickname stored in the map m_mapIdsNicknames.Lookup(lUserId, strNickname); CString strText; // Get the text encapsulated in the message message.GetAt(0, strText); // Update the UI of the dialog AddText(strNickname + _T(": ") + strText); // Prepare the message message.SetAt(0, strNickname); message.SetAt(1, strText); // Send the message to all others users SendMessageToAllUsersExceptFor(lUserId, message); } break; //... } }
NDKMessage concerning the length parameter of the GetAt and GetNext methods.CNDKMessage to make sure that the message is really a CNDKMessage.
SendMessageToSomeUsers in the NDKServer.cpp.
In 2002, the NDK was used in two NASA experiments for the Endeavor mission.
You don't have to be a guru of networking to create a client/server application, you only need to understand the above classes.
If you use the NDK in your project, I would really appreciate to receive an E-mail from you. I plan to make a web page of all programs using the NDK.
I would like to thank Yannick L�tourneau who helped me in NDK 1.0.
Good Programming!
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 29 Dec 2006 Editor: Smitha Vijayan |
Copyright 2000 by Sebastien_Lachance Everything else Copyright © CodeProject, 1999-2009 Web11 | Advertise on the Code Project |