socket发送命令到telnet客户端有关问题

socket发送命令到telnet客户端问题
DWORD CSocketTx::SendTh(CSocketTx *pSocketTx)
{
        char pBuff[256];
        int nRet;
        char ch;
       while(1)
     {
            if ( pSocketTx->m_nExit == 1 )
           { 
            ExitThread(0); 
             return 0; 
            }
          //等待用户输入信息
        WaitForSingleObject(stdin1,INFINITE);
          ch=getch();
        //将用户的输入信息发送给Telnet服务器
        nRet = send(pSocketTx->m_hSocket,&ch,sizeof(ch),0);
          if ( nRet == SOCKET_ERROR )
           {
         TRACE("\nSend Fail........!\n");
             pSocketTx->m_nExit = 0; 
           continue;
            }
       }
    return 0;
}
**************************************************************************************************************************************上面是我网上找到的一段程序,主要功能是进入路由器的,getch()函数是向打开的telnet客户端发送我们从键盘上输入的字符,当我们输入路由器IP以后,会在界面上有提示输入用户名和密码,先输用户名,输完用户名按enter键,会提示输入密码,如果按照上面的程序,我们只要一个字符一个字符输入用户名和密码就可以进入路由器。可现在我想直接发送字符串,进入到路由器,也就是不通过一个字符一个字符的输入,我想用通过数组的方式先定义好用户名和密码,等到提示输入用户名和密码时就发送字符串,实现路由器的自动登录,我搞了好久都没弄出来,求各位大神指点我,该怎么做。。。。。以前也有人在帖子上说过这个问题,http://bbs.****.net/topics/360034328,我的问题和他一样的吧。
------解决思路----------------------
DWORD CSocketTx::SendTh(CSocketTx *pSocketTx)
{
    char pBuff[256]="username\r\npassword\r\n";
    int nRet,i;
    char ch;

    i=0;
    while(1) {
        if ( pSocketTx->m_nExit == 1 ) {
            ExitThread(0);
            return 0;
        }
        //等待用户输入信息
//      WaitForSingleObject(stdin1,INFINITE);
//      ch=getch();
        ch=pBuff[i++];
        if (!ch) break;
        //将用户的输入信息发送给Telnet服务器
        nRet = send(pSocketTx->m_hSocket,&ch,sizeof(ch),0);
        if ( nRet == SOCKET_ERROR ) {
            TRACE("\nSend Fail........!\n");
            pSocketTx->m_nExit = 0;
            continue;
        }
    }
    return 0;
}

------解决思路----------------------
ch定义成char *的不就可以了,从键盘接的时候用gets(ch); send(pSocketTx->m_hSocket,ch,sizeof(ch),0);
------解决思路----------------------
在你接受数据的线程,recv收到的串和login:,Password:比较,如果是login:就立马send一个用户名的串,如果是Password就send一个密码的串,如果是其他不做任何操作
------解决思路----------------------
引用:
Quote: 引用:

ch定义成char *的不就可以了,从键盘接的时候用gets(ch); send(pSocketTx->m_hSocket,ch,sizeof(ch),0);

您好,您那个方法我也用过,不可以我不知道为什么我们可以输入进行输入用户名:root,但是我按回车时它不会提示我们输入密码,也就是程序到登录提示就停止了,是不是加个判断,当我输入字符串了,按enter键就发送指令。。。


不需要判断的,不过读入字符串一定要用gets()
------解决思路----------------------
引用:
Quote: 引用:

在你接受数据的线程,recv收到的串和login:,Password:比较,如果是login:就立马send一个用户名的串,如果是Password就send一个密码的串,如果是其他不做任何操作

您好,那意思就是我要定义一个数组为login[]="login";,password[]="password";,然后把这个放到recv这里是吗,
nRet = recv(pSocketTx->m_hSocket,pBuf,sizeof(pBuf),0);这里来判断当我输完ip是ok的,返回login等待输入,然后就在sand函数模块下发送一个str1="root";str2="****";这样可行吗?但是我感觉这样做的话,while(1),循环我就不知道怎么弄了。


用pBuf和你的两个string比较,如果和login相同就send一个用户名的串,如果和password相同就send一个密码的串,这些内容是写在你接受的线程中,不是在这个线程