vb6编写telnet后台工具,返回数据不正常!

adwnjt 2014-09-10 01:55:34
从网上找了段代码,修改了一翻也能正常登陆,但是在返回数据的时候,如果是命令的话,总是分开返回的。为什么会这样
比如我输入命令"dis clock",该命令文本会被分数次返回(视命令长度),
有时会是"d","is clock",有时可能会是"dis"," clock"
请高手帮我看看是为什么
如果能用白话解释一下telnet那些255,254,251,252等等代码更加感谢,网上找的资料实在看不明白如何使用。
代码如下:

Dim Receiving As Boolean

Private Sub Command1_Click()
If Winsock1.State <> 7 Then Exit Sub
s_str = Trim(Text1.Text) & Chr(13)
Winsock1.SendData s_str
Text1.Text = ""
End Sub

Private Sub Form_Load()
If Winsock1.State <> 0 Then Exit Sub
Winsock1.RemotePort = "23"
Winsock1.RemoteHost = "192.168.4.1"
Winsock1.Connect
Me.Caption = "Connecting"
End Sub

Private Sub Form_Resize()
List1.Left = Form1.ScaleLeft + 240
List1.Width = Form1.ScaleWidth - 440
List1.Top = 960
List1.Height = Form1.ScaleHeight - 1100
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim ch() As Byte
Dim TR() As Byte
Dim i As Integer
Dim str As String
Dim Pos_Tmp As Integer
Dim Str_Tmp As String
'-------------------------------------------------------------
'判断是否在接收数据
If Not Receiving Then
Receiving = True
Else
ReList "busy"
Receiving = False
Exit Sub
End If
'判断是否有返回数据
If (bytesTotal > 0) Then
Winsock1.GetData ch, vbByte + vbArray, bytesTotal
Else
Receiving = False
Exit Sub
End If
For i = 0 To bytesTotal - 1
str = str & Chr(ch(i))
Next i

If Not_Echo = False Then
If ch(0) <> 255 Then
For i = 0 To bytesTotal - 1
If ch(i) = 13 Then
ReList Str_Tmp
Str_Tmp = ""
Else
'把换行符过滤掉
If ch(i) = 10 Then
Str_Tmp = ""
Else
If Not_Return = True Then
If List1.ListCount > 0 Then
Str_Tmp = List1.List(List1.ListCount - 1) & Chr(ch(i))
List1.RemoveItem List1.ListCount - 1
End If
Not_Return = False
Else
Str_Tmp = Str_Tmp & Chr(ch(i))
End If
End If
End If
Next i
If ch(bytesTotal - 1) <> 10 Then
ReList Str_Tmp
Not_Return = True
Else
Not_Return = False
End If
End If
End If


If ch(0) = 255 Then
If ch(1) = 253 Then
ReDim TR(5) As Byte
TR(0) = 255: TR(1) = 254: TR(2) = 24
TR(3) = 255: TR(4) = 254: TR(5) = 31
' TR(6) = 255: TR(7) = 254: TR(8) = 35
' TR(9) = 255: TR(10) = 254: TR(11) = 39
' TR(12) = 255: TR(13) = 254: TR(14) = 36
Winsock1.SendData TR
End If
' If ch(1) = 251 Then
' ReDim TR(2) As Byte
' TR(0) = 13: TR(1) = 10
' Winsock1.SendData TR
' End If
End If

Receiving = False
End Sub

Sub ReList(ConTent As String)
List1.AddItem ConTent
If List1.ListCount > 300 Then List1.RemoveItem 0
'自动滚屏
List1.Selected(List1.ListCount - 1) = True
End Sub
...全文
242 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
adwnjt 2014-10-06
  • 打赏
  • 举报
回复
虽然没有满意的结果,但是感谢大家的热心帮助,结帖了。
三楼の郎 2014-09-12
  • 打赏
  • 举报
回复
定义一个数组或Collection对象,收到的任何东西先存起来,然后定时扫描数组检查里面的内容再做下一步的处理,一般来说网络通讯都是以回车换行来做指令结束,当然这主要得看通讯协议是怎么约定的,建议你还是先去熟悉一下你做的这个东西的通讯协议。
threenewbee 2014-09-11
  • 打赏
  • 举报
回复
定义一个局部变量保存接收数据,dataarrived接收了数据连接在那个变量后面。直到收到了回车或者Chr(0)再返回。
adwnjt 2014-09-11
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
定义一个局部变量保存接收数据,dataarrived接收了数据连接在那个变量后面。直到收到了回车或者Chr(0)再返回。
感谢回复,这个方法有个问题,当我开始连接的时候,对方返回让输入用户名和密码的信息时,最后一个接收到的字符是58,也就是“:",这样的话,不好判断啊,就算登陆成功之后,每次输入完命令,对方返回结果的时候,最后一个字符也不是回车或者chr(0)而是系统提示符(例如:<H3C>)的最后一个符号62,也就是">"

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧