• 大小: 3.05MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-07
  • 语言: C/C++
  • 标签:

资源简介

C语言实现的telnet客户端 选项协商:所有的选项协商都是服务器主动提出的,客户机不主动发送协商命令,只是对选项协商进行应答,对于回显、抑制继续进行、终端类型是要处理的,其他的否定。 子选项协商只发送终端类型。 终端类型是ANSI,解析ANSI控制码。 实现了上下左右键,客户机发送上下左右键的ANSI控制码。 登陆win7telent服务器和bbs,测试正常。 平台:win7 开发环境:vs2008 语言:C

资源截图

代码片段和文件信息

/*-------------------------------------------
   TelnetClient.cpp -- WinSock telnet client
               (c) Ma Jihong 2012-12-31
  -------------------------------------------*/
#include
#include
#include
#include
#pragma comment(lib “ws2_32.lib“)

#define BUF_SIZE 1024

const unsigned char IAC   = 255;
const unsigned char DONT  = 254;
const unsigned char DO   = 253;
const unsigned char WONT  = 252;
const unsigned char WILL  = 251;
const unsigned char SB   = 250;
const unsigned char SE    = 240;

enum STATE{STATE_DATA STATE_IAC STATE_OPTION STATE_SUBOPT};//解析服务器的信息时的各种状态
enum VERB{VERB_WILL VERB_WONT VERB_DO VERB_DONT};//记录服务器选项协商的常量
enum OPTION{ECHO = 1 SGA = 3 TERMTYPE = 24}; //要处理的选项协商的常量
enum ANSI_STATE{S_DATA S_ESC S_ESC0};  //解析ANSI控制码的 各种状态
enum {IS = 0 SEND = 1};  //终端子选项的常量
char escbuf[BUF_SIZE];   //储存ANSI控制码的缓冲区

void ParseMessage(unsigned char); //解析服务器接受的信息
void EchoOpt(unsigned char verb); //对回显选项协商的应答
void SGAOpt(unsigned char verb);  //对抑制继续进行选项协商的应答
void TermOpt(unsigned char verb); //对终端类型选项协商的应答
void RecvData(unsigned char ch);  //对接收的数据信息的处理
void ParseESC(char*char);        //解析ANSI控制码
void SendReply(unsigned char unsigned char);  //选项协商的应答
void SendNoReply(unsigned char  unsigned char);  //对不感兴趣的选项协商的否定应答
void SendTermType();         //发送本地终端类型这里是ANSI
void ansi_set_screen_attribute(int* int);  //设置显示文本的前景色和背景色
void ansi_set_cursor_position(int* int);   //设置光标的位置
void ansi_clear_screen(int* int);       //清屏
void ansi_erase_line();      //清除从光标开始到行末
void ansi_cursor_up(int);    //光标上移
void ansi_cursor_down(int);  //光标下移
void ansi_cursor_backward(int); //光标左移
void ansi_cursor_forward(int);  //光标右移
int SendData(SOCKET sock char* sendbuf int sendlen);  //向服务器发送信息
char* ltrim(char*);   //用户输入时,去掉输入串左边的空白符
char* rtrim(char*);   //用户输入时,去掉输入串右边的空白符
void getip(char* int); //得到用户输入的ip或域名
DWORD WINAPI SendProc(LPVOID lpParemeter);  //发送信息线程函数
DWORD WINAPI RecvProc(LPVOID lpParemeter);  //接受信息线程函数

HANDLE hstdin;
HANDLE hstdout;
SOCKET sock;
int main()
{
WSADATA wsaData;
SOCKADDR_IN srvaddr;
HANDLE hThread[2];
int ret;
hostent remotehost*phostent;
char strIP[80];

phostent = &remotehost;

hstdin = GetStdHandle(STD_INPUT_HANDLE);
hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
FlushConsoleInputBuffer(hstdin);//注意,初始化刷新输入缓冲区
COORD bufsize = {100 40};
SetConsoleScreenBufferSize(hstdout bufsize);

ret = WSAStartup(MAKEWORD(2 2) &wsaData);

if(ret != 0)
{
printf(“加载套接字库失败\n“);
return -1;
}

if(LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2)
{
printf(“套接字库版本不一致\n“);
WSACleanup();
return -1;
}

sock = socket(AF_INET SOCK_STREAM IPPROTO_TCP);
if(sock == INVALID_SOCKET)
{
printf(“创建套接字失败\n“);
WSACleanup();
        return -1;
}
getip(strIP 80);
if(strIP[0] >= ‘0‘ && strIP[0] <= ‘9‘)
{
srvaddr.sin_addr.S_un.S_addr = inet_addr(st

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      40960  2013-01-01 15:46  TelnetTest\Debug\TelnetTest.exe

     文件     458648  2013-01-01 15:46  TelnetTest\Debug\TelnetTest.ilk

     文件     535552  2013-01-01 15:46  TelnetTest\Debug\TelnetTest.pdb

     文件      10498  2013-01-01 15:46  TelnetTest\TelnetTest\Debug\BuildLog.htm

     文件      68267  2013-01-01 15:46  TelnetTest\TelnetTest\Debug\main.obj

     文件         65  2013-01-01 15:46  TelnetTest\TelnetTest\Debug\mt.dep

     文件        663  2012-12-10 14:03  TelnetTest\TelnetTest\Debug\TelnetTest.exe.embed.manifest

     文件        728  2012-12-10 14:03  TelnetTest\TelnetTest\Debug\TelnetTest.exe.embed.manifest.res

     文件        621  2013-01-01 15:46  TelnetTest\TelnetTest\Debug\TelnetTest.exe.intermediate.manifest

     文件     363520  2013-01-01 15:46  TelnetTest\TelnetTest\Debug\vc90.idb

     文件     126976  2013-01-01 15:46  TelnetTest\TelnetTest\Debug\vc90.pdb

     文件      16259  2013-01-01 14:26  TelnetTest\TelnetTest\main.cpp

     文件       3922  2012-12-18 16:52  TelnetTest\TelnetTest\TelnetTest.vcproj

     文件       1415  2013-01-01 16:14  TelnetTest\TelnetTest\TelnetTest.vcproj.xiaoma-PC.Administrator.user

     文件   14085120  2013-01-01 16:14  TelnetTest\TelnetTest.ncb

     文件        896  2012-12-10 13:41  TelnetTest\TelnetTest.sln

    ..A..H.      9728  2013-01-01 16:14  TelnetTest\TelnetTest.suo

     文件     156469  2013-01-01 16:12  程序说明.docx

     目录          0  2013-01-01 15:46  TelnetTest\TelnetTest\Debug

     目录          0  2012-12-30 16:05  TelnetTest\Debug

     目录          0  2013-01-01 14:26  TelnetTest\TelnetTest

     目录          0  2012-12-31 15:46  TelnetTest

----------- ---------  ---------- -----  ----

             15880307                    22


评论

共有 条评论