您的位置:程序门 -> vb -> 网络编程



关于vb利用winsock开发telnet客户端不能连接部分主机的问题:紧急!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于vb利用winsock开发telnet客户端不能连接部分主机的问题:紧急!
发表于:2007-05-27 00:31:40 楼主
我现在有个项目急需用vb做一个自动telnet到主机的程序。

我在网上下载了vb   for   telnet的源代码程序。但这个程序不能登录所有的telnet主机。
只要telnet主机返回的消息要求网络协商,客户端就不再接收数据,甚至连提示输入登录名的信息都没有返回,只返回几个“???”的字符。

我测试时用windows   xp自带的telnet服务器连接,登录不了。实际环境需要登录aix   unix   telnet主机,也登录不了。

我测试时的代码是:http://www.99d.com.cn/download/vbnet/telnet.zip
客户端接收到以下信息: "welcome   to   microsoft   telnet   service "     然后就执行winsock.close了。


这个问题在:楼主yochang()2006-11-30   12:39:44   在   vb   /   网络编程   提问
问题:即http://topic.csdn.net/t/20061130/12/5196635.html#top

提到过。

yochang()说找到了方法。但按照他的方法还是不行。

'*****************************************************************************
'     为解决hlr41、42的问题,增加的代码
'*****************************************************************************
function   inkey()   as   byte
        dim   b           as   byte
        '循环等待服务器端的数据
        while   winsock1.bytesreceived   =   0
                nop
        wend
        '获得服务器端数据,每次获得一个字节
        winsock1.getdata   b
        '返回获得的字节
        inkey   =   b
end   function
'控操作过程,以等待服务器端的数据
sub   nop()
                    doevents:       doevents:       doevents:       doevents:       doevents:       doevents:       doevents:
                    doevents:       doevents
end   sub
function   vvv(d$)
        '将字符串转换成数值
        vvv   =   val(d$)
        '然后去除被转换成数值的字符串
        d$   =   mid$(d$,   instr(d$   +   "; ",   "; ")   +   1)
end   function
sub   sendchars(d$)
        dim   b           as   byte
        while   d$   <>   " "
                        b   =   vvv(d$)
                        '然后发送该字节
                           
                           
                        winsock1.senddata   b
        wend
end   sub
sub   ttt()
    dim   b           as   byte,   ll
    dim   c,   d,   v,   xx,   yy                           as   byte
    dim   x,   y,   l,   f,   t                           as   integer
    dim   s$,   dat$,   p&
       
    while   winsock1.bytesreceived   >   0
                    'doevents
                    b   =   inkey
                    '分析得到的字节数据
                    select   case   b
                    case   255
                    '255表示的是命令的先导字符,即后面的数据是命令
                                    '接着获得后面两个字节的数据,分别放在变量c和d中
                                    c   =   inkey
                                    d   =   inkey
                                    '如果c为253,表示发出do命令,服务器提出要求协商
                                    if   c   =   253   then     'and   (d   =   1   or   d   =   24)
                                                    sendchars   "255;251; "   &   d
                                                    goto   l2
                                    end   if
                                    '如果c为254,表示拒绝接收
                                    if   c   =   254   and   d   =   1   then
                                                    sendchars   "255;252;1 "
                                                    goto   l2
                                    end   if
                                    '如果为251       ,表示愿意激活某个选项
                                    if   c   =   251   and   d   =   1   then
                                                    sendchars   "255;254;1 "
                                                    goto   l2
                                    end   if
                                    '如果是250,表示的是子协商选项
                                    if   c   =   250   then
                                                    '循环等到d等于240,表示子协商结束
                                                    while   d   <>   240
                                                                    d   =   inkey
                                                    wend
                                                    sendchars   "255;250;24;0;118;116;49;48;48;255;240 "
                                                    goto   l2
                                    end   if
                                    '如果是253,发出do命令
                                      if   c   =   253   then
                                                      sendchars   "255;252; "   &   d
                                                      goto   l2
                                      end   if
   
                    end   select
l2:           wend
        'connectdd   =   true
end   sub


ttt的进程是不是放在winsockclient_dataarrival中?
为什么我跟踪的时候,返回到: "welcome   to   microsoft   telnet   service "时,winsock自动close了??

用cmd的telnet登录是正常的。


请大侠们指点指点,感激不尽!
发表于:2007-05-27 00:55:221楼 得分:0
头晕....友情帮顶....
发表于:2007-05-27 01:05:012楼 得分:0
我在网络上整整找了2天   都没有找到一个vb开发的,能够登录绝大部分telnet主机的例程序。

问的人倒不少,就是没有回答的。头疼啊。
只要碰到传回来的数据是不可见字符或者是中文,telnet客户端就执行不下去了!

急待高手帮忙!


快速检索

最新资讯
热门点击