telnet server.cpp
上传用户:zhangwei01
上传日期:2007-01-09
资源大小:25k
文件大小:3k
源码类别:

Telnet服务器

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "telnet.h"
  3. // prototypes of callback functions
  4. CString displayHelp( const CString& sArg );
  5. CString trace(       const CString& sArg );
  6. CString stop(        const CString& sArg );
  7. CString nomatch(     const CString& sArg );
  8. // a critical section is needed, bcause
  9. // bStoppping and iCounter are used by the main- and the telnetThread
  10. CRITICAL_SECTION critSection;
  11. bool bStopping = false;
  12. int  iCounter  = 0;
  13. bool bStop     = false;
  14. int main(int argc, char* argv[])
  15. {
  16. InitializeCriticalSection( &critSection );
  17. CTelnet telnet( "Welcome at my telnetserverrn" // intro screen
  18.           , "scott" // userid
  19.   , "Enter userid:" // userid prompt
  20.   , "tiger" // userid
  21.   , "Enter password: " // password prompt
  22.   , "Command >" // prompt to use
  23.   , 23 ); // port to run on
  24. // register callback functions
  25. telnet.registerFunction( trace       , "trace" ); // gets called when user typed 'trace'
  26. telnet.registerFunction( displayHelp , "help"  ); // gets called when user typed 'help'
  27. telnet.registerFunction( stop        , "stop"  ); // gets called when user typed 'stop'
  28. telnet.registerFunction( nomatch     , ""      ); // gets called when user typed ENTER
  29. // start the server
  30. if ( !telnet.start() )
  31. {
  32. printf( "error occured %s n", telnet.getLastError() );
  33. return 0;
  34. }
  35. // very simple..... just increment counter and sleep for one second
  36. while( !bStopping )
  37. {
  38. iCounter ++;
  39. Sleep(1000);
  40. // 30 seconds passed, change prompt
  41. EnterCriticalSection( &critSection );
  42. if ( iCounter == 30 )
  43. {
  44. telnet.write( "rn30 seconds passed, changing prompt!rn" );
  45. telnet.setPrompt( "New prompt >" );
  46. }
  47. bStopping = bStop;
  48. LeaveCriticalSection( &critSection );
  49. }
  50. telnet.stop();
  51. return 0;
  52. }
  53. ///////////////////////////////////////////////////////////////////
  54. // gets called when user presses ENTER
  55. CString nomatch( const CString& sArg )
  56. {
  57. return "Type help for helprn";
  58. }
  59. //////////////////////////////////////////////////////////////////
  60. // gets called when user issued 'help'
  61. CString displayHelp( const CString& sArg )
  62. {
  63. CString sHlp;
  64. sHlp  = "rnCommands currently supported:rnrn";
  65. sHlp += "trace           displays current value of the counterrn";
  66. sHlp += "stop            quits the programrn";
  67. sHlp += "stop 10         quits the program over 10 secondsrnrn";
  68. return sHlp;
  69. }
  70. //////////////////////////////////////////////////////////////////
  71. // gets called when user issued 'trace'
  72. CString trace( const CString& sArg )
  73. {
  74. CString sValBack;
  75. EnterCriticalSection( &critSection );
  76. sValBack.Format( "rnCurrent value of iCounter=%irn", iCounter );
  77. LeaveCriticalSection( &critSection );
  78. return sValBack;
  79. }
  80. //////////////////////////////////////////////////////////////////
  81. // gets called when user issued 'stop'
  82. CString stop( const CString& sArg )
  83. {
  84. if ( sArg == " 10" )
  85. {
  86. Sleep(10000);
  87. }
  88. EnterCriticalSection( &critSection );
  89. bStop = true;
  90. LeaveCriticalSection( &critSection );
  91. return "Stopping the programrn";
  92. }