telnet.cpp
上传用户:kunlunxyl
上传日期:2007-01-07
资源大小:45k
文件大小:3k
源码类别:

Telnet客户端

开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Module: telnet.cpp
  4. //
  5. // Contents: telnet main program
  6. //
  7. // Product: telnet
  8. //
  9. // Revisions: 02.Apr.1995 igor.milavec@uni-lj.si
  10. // Original code
  11. //
  12. ///////////////////////////////////////////////////////////////////////////////
  13. #include <stdio.h>
  14. #include "telnet.h"
  15. #include "tnnet.h"
  16. #include "tncon.h"
  17. #include "tnerror.h"
  18. // Structure to hold parsed command line parameters.
  19. struct TelParams {
  20. char* szHost;
  21. short sPort;
  22. };
  23. void telSetConsoleTitle(TelParams& Parameters)
  24. {
  25. char szTitle[128];
  26. wsprintf(szTitle, "Telnet - %s", Parameters.szHost);
  27. SetConsoleTitle(szTitle);
  28. }
  29. SOCKET telConnect(TelParams& Parameters)
  30. {
  31. printm(0, FALSE, MSG_TRYING);
  32. SOCKET Socket = socket(AF_INET, SOCK_STREAM, 0);
  33. SOCKADDR_IN SockAddr;
  34. SockAddr.sin_port = htons(Parameters.sPort);
  35. SockAddr.sin_family = AF_INET;
  36. SockAddr.sin_addr.s_addr = inet_addr(Parameters.szHost);
  37. // Were we given host name?
  38. if (SockAddr.sin_addr.s_addr == INADDR_NONE) {
  39. // Resolve host name to IP address.
  40. hostent* pHostEnt = gethostbyname(Parameters.szHost);
  41. if (!pHostEnt)
  42. return INVALID_SOCKET;
  43. SockAddr.sin_addr.s_addr = *(DWORD*)pHostEnt->h_addr;
  44. }
  45. if (connect(Socket, (sockaddr*)&SockAddr, sizeof(SockAddr)))
  46. return INVALID_SOCKET;
  47. printm(0, FALSE, MSG_CONNECTED, Parameters.szHost);
  48. return Socket;
  49. }
  50. void telDisconnect(SOCKET Socket)
  51. {
  52. closesocket(Socket);
  53. }
  54. BOOL telProcessParameters(TelParams& Parameters, int ArgC, char* ArgV[])
  55. {
  56. if (ArgC < 2)
  57. return FALSE;
  58. Parameters.szHost = ArgV[1];
  59. Parameters.sPort = 23;
  60. return TRUE;
  61. }
  62. int main(int ArgC, char* ArgV[])
  63. {
  64. TelParams Parameters;
  65. if (!telProcessParameters(Parameters, ArgC, ArgV)) {
  66. printm(0, FALSE, MSG_USAGE);
  67. return 1;
  68. }
  69. telSetConsoleTitle(Parameters);
  70. WSADATA WsaData;
  71. if (WSAStartup(MAKEWORD(1, 1), &WsaData)) {
  72. DWORD dwLastError = GetLastError();
  73. printm(0, FALSE, MSG_ERROR, "WSAStartup()");
  74. printm(0, TRUE, dwLastError);
  75. return 1;
  76. }
  77. SOCKET Socket = telConnect(Parameters);
  78. if (Socket == INVALID_SOCKET) {
  79. printm(0, FALSE, 0xC0000000 + GetLastError());
  80. return 2;
  81. }
  82. TelThreadParams ThreadParams = {Socket, CreateEvent(0, TRUE, FALSE, 0)};
  83. DWORD idThread;
  84. HANDLE hThread = CreateThread(0, 0,
  85. (LPTHREAD_START_ROUTINE)telProcessNetwork,
  86. (LPVOID)&ThreadParams, 0, &idThread);
  87. if (hThread) {
  88. CloseHandle(hThread);
  89. }
  90. telProcessConsole(&ThreadParams);
  91. telDisconnect(Socket);
  92. WSACleanup();
  93. return 0;
  94. }