我做的一个telnet客户端工具
登陆到server的时候
出了显示本来有的正常的文字外
还显示出<-[1;33m等一些字符
这些字符很多夹在正常文字中间,请问高手这是怎么回事啊?
这是我的一部分code
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRet;
WSADATA wd;
int nPort;
char strIP[256];
char strTitle[256];
SOCKET hSocket;
HANDLE hThread[2]; nRet = AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0);
if ( nRet == FALSE )
{
printf("\nAfxWinInit Fail..............!\n");
return 0;
} nPort = IPPORT_TELNET;
SetConsoleTitle("Try To connect...");
WSAStartup(0x0101,&wd);
stdin1 = GetStdHandle(STD_INPUT_HANDLE);
stdout1 = GetStdHandle(STD_OUTPUT_HANDLE);
stderr1 = GetStdHandle(STD_ERROR_HANDLE);
hHeap1 = GetProcessHeap();
SetConsoleMode(stdin1,ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT);
printf("\n请输入网址 IP/Domain.........:");
scanf("%s",strIP);
if ( strlen(strIP) < 3 ) { printf("\nBad IP/Domain\n"); getch(); return 0; }
printf("\nPort...........%d :",nPort);
CSocketDx SocketDx(strIP,nPort);
hSocket = SocketDx.TelnetConnect();
if ( hSocket == NULL ) { printf("\nUnable To Connect\n");getch(); return 0; }
CSocketRx SocketRx(hSocket,hThread[0]);
CSocketTx SocketTx(hSocket,hThread[1]); wsprintf(strTitle,"Connecting to %s:%d",strIP,nPort);
SetConsoleTitle(strTitle); WaitForMultipleObjects(2,hThread,FALSE,INFINITE);
return 0;
}
登陆到server的时候
出了显示本来有的正常的文字外
还显示出<-[1;33m等一些字符
这些字符很多夹在正常文字中间,请问高手这是怎么回事啊?
这是我的一部分code
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRet;
WSADATA wd;
int nPort;
char strIP[256];
char strTitle[256];
SOCKET hSocket;
HANDLE hThread[2]; nRet = AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0);
if ( nRet == FALSE )
{
printf("\nAfxWinInit Fail..............!\n");
return 0;
} nPort = IPPORT_TELNET;
SetConsoleTitle("Try To connect...");
WSAStartup(0x0101,&wd);
stdin1 = GetStdHandle(STD_INPUT_HANDLE);
stdout1 = GetStdHandle(STD_OUTPUT_HANDLE);
stderr1 = GetStdHandle(STD_ERROR_HANDLE);
hHeap1 = GetProcessHeap();
SetConsoleMode(stdin1,ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT);
printf("\n请输入网址 IP/Domain.........:");
scanf("%s",strIP);
if ( strlen(strIP) < 3 ) { printf("\nBad IP/Domain\n"); getch(); return 0; }
printf("\nPort...........%d :",nPort);
CSocketDx SocketDx(strIP,nPort);
hSocket = SocketDx.TelnetConnect();
if ( hSocket == NULL ) { printf("\nUnable To Connect\n");getch(); return 0; }
CSocketRx SocketRx(hSocket,hThread[0]);
CSocketTx SocketTx(hSocket,hThread[1]); wsprintf(strTitle,"Connecting to %s:%d",strIP,nPort);
SetConsoleTitle(strTitle); WaitForMultipleObjects(2,hThread,FALSE,INFINITE);
return 0;
}
解决方案 »
- 在CPP后缀名的文件,没有错误,但是到了后缀名C文件就出错。
- 数组转换?? 谢谢
- 用哪个API可以播放像TM这类型的文件??
- 《Visual C++编程技巧典型案例解析:图形图像处理与数据库篇》
- 我怎么从Excle格式文件里读不到数据呢?急!!
- (一)请 ljn2(没有人2 (账户惨被封))来接分,感谢你回答问题,我日,终于搞定了,版主不要删啊~
- ATL开发指南里的一个问题
- 急!!!急!!!如何在视图上画一个线后,对这个线进行鼠标响应,比如当鼠标移上去时改变线的颜色[再次放出]
- 谁有这个函数的反函数(关于base64)
- 如何得到winamp的歌曲的时间?
- WinSocket编程时的指针问题… …(急,急)
- 文件夹图标
帮我看看:)
socketRx.cpp
CSocketRx::CSocketRx()
{}CSocketRx::CSocketRx(SOCKET hSocket,HANDLE &hThread)
{
DWORD dwRet; m_nExit = 0;
m_hThread = NULL;
m_hSocket = hSocket; m_hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) RdTh,(LPVOID)this,0,&dwRet);
if ( m_hThread == NULL ) return;
hThread = m_hThread;
}CSocketRx::~CSocketRx()
{
m_nExit = 1;
}
DWORD CSocketRx::RdTh(CSocketRx *pSocketRx)
{
char pBuf[256];
char* scan;
int nRet; while(1)
{
if ( pSocketRx->m_nExit == 1 ) { ExitThread(0); return 0; }
nRet = recv(pSocketRx->m_hSocket,pBuf,sizeof(pBuf),0);
if ( nRet == SOCKET_ERROR ) { TRACE( "\nRaed Fail.........!\n" ); pSocketRx->m_nExit = 1; continue;}
if ( nRet == 0) Sleep(10);
scan = pBuf;
while(nRet--)
{
pSocketRx->m_Protocol.TelentProtcol(pSocketRx->m_hSocket,*scan++);
TRACE("%c ",*scan);
} }
return 0;
}
sockettx.cpp
CSocketTx::CSocketTx(SOCKET hSocket,HANDLE &hThread)
{
DWORD dwRet; m_nExit = 0;
m_hThread = NULL;
m_hSocket = hSocket; m_hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) SendTh,(LPVOID)this,0,&dwRet);
if ( m_hThread == NULL ) return;
hThread = m_hThread;
}
CSocketTx::~CSocketTx()
{
m_nExit = 1;
}
DWORD CSocketTx::SendTh(CSocketTx *pSocketTx)
{
char pBuff[256];
unsigned long dwLen;
int nRet;
char ch; dwLen = 1;
while(1)
{
if ( pSocketTx->m_nExit == 1 ) { ExitThread(0); return 0; }
WaitForSingleObject(stdin1,INFINITE);
ch = getch();
nRet = send(pSocketTx->m_hSocket,&ch,dwLen,0);
if ( nRet == SOCKET_ERROR ) { TRACE("\nSend Fail........!\n"); pSocketTx->m_nExit = 0; continue;}
}
return 0;
}
唉,想當年我也是做過一個這種東西,這些字符我是一個一個弄明白他們的含義再自己處理的。
那要怎么处理这种情况呢?
希望指点一下
例:
-[ 1;33m
^^^
這部分是轉義符,表明以下代碼 (1;33m)是控制字符表現的,而不是要顯示的。這時候你要做的就是把它的含義弄清楚,假如,1表示變色,而33表示紅色。那你就把後面的字符顏色設為紅色再顯示出來。 具體的含義,當初我沒有找到標准的對照表,全是我自己猜的。
你可以用cterm登錄到同一個網站,就可以知道那些字符是什麼意思了。