Click here to Skip to main content
15,860,972 members
Articles / Desktop Programming / MFC
Article

Telnet server classes

Rate me:
Please Sign up or sign in to vote.
4.35/5 (22 votes)
12 Jun 20012 min read 181.7K   4.2K   53   29
Some classes and sample code on how to control/access your app remotely, using a telnet client.

Introduction

This article presents two classes: CTelnet and CTelnetSocket, and one global function: TelnetThread. Using the CTelnet class, you can access/control your application remotely using a Telnet client. The download contains the classes to use, and a program to demonstrate the use of the CTelnet class.

CTelnetSocket is a class that is used internally (using Winsock calls). The global TelnetThread function is started as a separate thread. This way your application can run and the TelnetThread does all the Telnet activity. You can register some callback functions which are called by the TelnetThread. Usage is very easy:

Instantiate the CTelnet class:

CTelnet telnet( "Welcome at my telnetserver\r\n"    // intro screen
          , "scott"                               // userid
          , "Enter userid:"                     // userid prompt
          , "tiger"                           // password
          , "Enter password: "              // password prompt
          , "Command >"                   // prompt to use
          , 23 );                       // port to run on

Say, you want a function to be called whenever a user types help. Create a help function like this:

CString help( const CString& sArg );        // help function prototype

// implementation of the help function
CString help( const CString& sArg )
{
    return "\r\nCurrently no commands are implemented\r\n";
}

So this function gets called whenever the user types help (Not case sensitive). It will send data to the client "Currently no commands are implemented". When the user types "help command", sArg will contain the value " command". The next step is to register this (callback) function:

telnet.registerFunction( help , "help" );

You can create as much callback functions as you like. It is also possible to write a callback function that is called whenever the user just presses "enter". Register the function, and leave the second argument empty ("").

The next step is to start the service.

telnet.start();

Now, a user can connect to your application, that's it... Please note that a separate thread is running your Telnet service. So your application can do whatever you want after the start method is called.

Stopping the Telnet server is done by the destructor, or by calling the method stop:

telnet.stop();

When the application is running, you have two methods available: write() and setPrompt(). With the write method, you can write data to the client connected. E.g. it can be used for sending trace data.

telnet.write( "this will be sent to the client connected" );

Please note that this method cannot be used by any of the callback functions (It is not needed anyway, see implementation of callback help function).

Another method that can be called when the Telnet server is running is: setPrompt, which sets the prompt which is presented to the client:

telnet.setPrompt( "Another prompt>" );

Please note that this method cannot be used by any of the callback functions.

Final remarks:

  • For every instantiation of the CTelnet class, only one client can connect, you can however instantiate as many instances of CTelnet as you like.
  • When sharing data between the application and the callback functions (e.g. global variables), make sure you do that thread safe (e.g. using Critical Sections). The sample program which comes with the project files should give an idea on how to do this.
  • Most methods give back a boolean, true means it succeeded, false means it did not succeed. Call getLastError() to get the error that occurred.
  • The Telnet client connected should not do a local echo because the server does that itself.
  • Only backspace is implemented as a text editor command.

Have fun!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Netherlands Netherlands
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralMy vote of 1 Pin
Aric Wang22-Sep-11 18:50
Aric Wang22-Sep-11 18:50 
GeneralMy vote of 5 Pin
(BlackBox) Ethical Hacker31-Oct-10 5:35
(BlackBox) Ethical Hacker31-Oct-10 5:35 
Nice
GeneralDetected memory leaks Pin
nflx5-Mar-06 19:37
nflx5-Mar-06 19:37 
QuestionUNIX? Pin
jontemannen2-Feb-06 4:32
jontemannen2-Feb-06 4:32 
GeneralVery Good Pin
MasterGohan17-Jan-06 7:30
MasterGohan17-Jan-06 7:30 
QuestionRe: Very Good Pin
gmt20016-Feb-07 9:20
gmt20016-Feb-07 9:20 
AnswerRe: Very Good Pin
IantLetoxx24-Mar-10 11:23
IantLetoxx24-Mar-10 11:23 
GeneralTalking to Unix Pin
petetastic26-Jan-04 15:50
petetastic26-Jan-04 15:50 
AnswerRe: Talking to Unix Pin
Nigel Atkinson20-Feb-06 18:53
Nigel Atkinson20-Feb-06 18:53 
QuestionMFC implementation? Pin
Jan7513-Dec-02 0:02
Jan7513-Dec-02 0:02 
AnswerRe: MFC implementation? Pin
MasterGohan17-Jan-06 7:42
MasterGohan17-Jan-06 7:42 
QuestionHow can we capture the data into a buffer in response to a command send to a test system using this Telnet Class Pin
13-Dec-01 11:30
suss13-Dec-01 11:30 
GeneralBug? - Cannot disconnect then reconnect Pin
18-Nov-01 18:17
suss18-Nov-01 18:17 
QuestionTelnet Client? Pin
Matt Newman17-Nov-01 13:28
Matt Newman17-Nov-01 13:28 
AnswerRe: Telnet Client? Pin
27-Nov-01 9:46
suss27-Nov-01 9:46 
GeneralRe: Telnet Client? Pin
Matt Newman28-Nov-01 11:29
Matt Newman28-Nov-01 11:29 
GeneralRe: Telnet Client? Pin
Hanphy18-May-03 22:13
Hanphy18-May-03 22:13 
GeneralRe: Telnet Client? Pin
mohammad arif22-Oct-03 18:21
mohammad arif22-Oct-03 18:21 
GeneralRe: Telnet Client? Pin
Anonymous14-Mar-04 10:32
Anonymous14-Mar-04 10:32 
GeneralRe: Telnet Client? Pin
marfemag30-May-04 12:43
marfemag30-May-04 12:43 
GeneralRe: Telnet Client? Pin
Nigel Atkinson20-Feb-06 18:57
Nigel Atkinson20-Feb-06 18:57 
GeneralRe: Telnet Client? Pin
rushivyas17-Aug-10 8:27
rushivyas17-Aug-10 8:27 
GeneralRe: Telnet Client? Pin
rushivyas17-Aug-10 8:30
rushivyas17-Aug-10 8:30 
AnswerRe: Telnet Client? Pin
liwenhaosuper13-Feb-11 16:07
liwenhaosuper13-Feb-11 16:07 
GeneralRe: Where to put your server name? Pin
Matt Newman17-Nov-01 13:21
Matt Newman17-Nov-01 13:21 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.