-
大小: 3.05MB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2023-11-07
- 語言: C/C++
- 標(biāo)簽:
資源簡(jiǎn)介
C語言實(shí)現(xiàn)的telnet客戶端
選項(xiàng)協(xié)商:所有的選項(xiàng)協(xié)商都是服務(wù)器主動(dòng)提出的,客戶機(jī)不主動(dòng)發(fā)送協(xié)商命令,只是對(duì)選項(xiàng)協(xié)商進(jìn)行應(yīng)答,對(duì)于回顯、抑制繼續(xù)進(jìn)行、終端類型是要處理的,其他的否定。
子選項(xiàng)協(xié)商只發(fā)送終端類型。
終端類型是ANSI,解析ANSI控制碼。
實(shí)現(xiàn)了上下左右鍵,客戶機(jī)發(fā)送上下左右鍵的ANSI控制碼。
登陸win7telent服務(wù)器和bbs,測(cè)試正常。
平臺(tái):win7 開發(fā)環(huán)境: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};//解析服務(wù)器的信息時(shí)的各種狀態(tài)
enum?VERB{VERB_WILL?VERB_WONT?VERB_DO?VERB_DONT};//記錄服務(wù)器選項(xiàng)協(xié)商的常量
enum?OPTION{ECHO?=?1?SGA?=?3?TERMTYPE?=?24};?//要處理的選項(xiàng)協(xié)商的常量
enum?ANSI_STATE{S_DATA?S_ESC?S_ESC0};??//解析ANSI控制碼的?各種狀態(tài)
enum?{IS?=?0?SEND?=?1};??//終端子選項(xiàng)的常量
char?escbuf[BUF_SIZE];???//儲(chǔ)存ANSI控制碼的緩沖區(qū)
void?ParseMessage(unsigned?char);?//解析服務(wù)器接受的信息
void?EchoOpt(unsigned?char?verb);?//對(duì)回顯選項(xiàng)協(xié)商的應(yīng)答
void?SGAOpt(unsigned?char?verb);??//對(duì)抑制繼續(xù)進(jìn)行選項(xiàng)協(xié)商的應(yīng)答
void?TermOpt(unsigned?char?verb);?//對(duì)終端類型選項(xiàng)協(xié)商的應(yīng)答
void?RecvData(unsigned?char?ch);??//對(duì)接收的數(shù)據(jù)信息的處理
void?ParseESC(char*char);????????//解析ANSI控制碼
void?SendReply(unsigned?char?unsigned?char);??//選項(xiàng)協(xié)商的應(yīng)答
void?SendNoReply(unsigned?char??unsigned?char);??//對(duì)不感興趣的選項(xiàng)協(xié)商的否定應(yīng)答
void?SendTermType();?????????//發(fā)送本地終端類型這里是ANSI
void?ansi_set_screen_attribute(int*?int);??//設(shè)置顯示文本的前景色和背景色
void?ansi_set_cursor_position(int*?int);???//設(shè)置光標(biāo)的位置
void?ansi_clear_screen(int*?int);???????//清屏
void?ansi_erase_line();??????//清除從光標(biāo)開始到行末
void?ansi_cursor_up(int);????//光標(biāo)上移
void?ansi_cursor_down(int);??//光標(biāo)下移
void?ansi_cursor_backward(int);?//光標(biāo)左移
void?ansi_cursor_forward(int);??//光標(biāo)右移
int?SendData(SOCKET?sock?char*?sendbuf?int?sendlen);??//向服務(wù)器發(fā)送信息
char*?ltrim(char*);???//用戶輸入時(shí),去掉輸入串左邊的空白符
char*?rtrim(char*);???//用戶輸入時(shí),去掉輸入串右邊的空白符
void?getip(char*?int);?//得到用戶輸入的ip或域名
DWORD?WINAPI?SendProc(LPVOID?lpParemeter);??//發(fā)送信息線程函數(shù)
DWORD?WINAPI?RecvProc(LPVOID?lpParemeter);??//接受信息線程函數(shù)
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);//注意,初始化刷新輸入緩沖區(qū)
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(“創(chuàng)建套接字失敗\n“);
WSACleanup();
????????return?-1;
}
getip(strIP?80);
if(strIP[0]?>=?‘0‘?&&?strIP[0]?<=?‘9‘)
{
srvaddr.sin_addr.S_un.S_addr?=?inet_addr(st
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????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.em
?????文件????????728??2012-12-10?14:03??TelnetTest\TelnetTest\Debug\TelnetTest.exe.em
?????文件????????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
評(píng)論
共有 條評(píng)論