我做的一个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;
}

解决方案 »

  1.   

    谢谢了
    帮我看看:)
    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;
    }
      

  2.   

    <-[1;33m 是一些標識字符,負責控制字符顏色,閃爍,換行等信息,
    唉,想當年我也是做過一個這種東西,這些字符我是一個一個弄明白他們的含義再自己處理的。
      

  3.   

    rokia(rokia) (  ) 
    那要怎么处理这种情况呢?
    希望指点一下
      

  4.   

    你把你得到的信息仔細的看一下,弄明白 是什麼意思,然後自己在程序裡控制。
    例:
      -[ 1;33m
      ^^^
       這部分是轉義符,表明以下代碼 (1;33m)是控制字符表現的,而不是要顯示的。這時候你要做的就是把它的含義弄清楚,假如,1表示變色,而33表示紅色。那你就把後面的字符顏色設為紅色再顯示出來。  具體的含義,當初我沒有找到標准的對照表,全是我自己猜的。
      你可以用cterm登錄到同一個網站,就可以知道那些字符是什麼意思了。