找回密码
 加入
搜索
查看: 5250|回复: 10

[系统综合] [已解决]关于TCPRecv返回内容的问题

  [复制链接]
发表于 2012-5-28 12:38:05 | 显示全部楼层 |阅读模式
本帖最后由 fuinei 于 2012-6-1 10:09 编辑

各位好,使用TCPRecv接收SMBridge返回的字符串时出现问题,正常应返回“Username:”,但实际上返回“0xFFFD18FFFB01FFFE01FFFFB03FFFB00FFFD00”,请问各位知道如何解决这个问题吗?
发表于 2012-5-28 13:03:56 | 显示全部楼层
请用BinaryToString()转化接收到的
 楼主| 发表于 2012-5-29 17:58:58 | 显示全部楼层
回复 2# xms77

使用BinaryToString()转化接收到的字符,Username:转化为? ? ? ?结果仍然不正确
发表于 2012-5-29 21:07:54 | 显示全部楼层
回复 3# fuinei
可否上码看看先?
 楼主| 发表于 2012-5-30 08:36:30 | 显示全部楼层
回复 4# xms77

代码的作用是telnet到SMbridge 623端口,通过BMC重启服务器
目前只写了前面一部分,后面是输入用户名、密码连接到指定服务器的BMC后执行重启操作
                                
Local $SMBridge_host = "192.168.1.1"                                            
Local $port = 623                                
Local $SMBridge_username = "administrator"                                 
Local $SMBridge_passwd = "qwerty."                
Local $delay = "3000"

TCPStartup()
$socket = TCPConnect($SMBridge_host, $port)
If $socket = -1 Then
        MsgBox(48,"Error","无法连接到SMBridge服务器失败,程序将退出!")
        TCPCloseSocket($socket)        
        TCPShutdown()        
        Exit
EndIf

Sleep($delay) 
$ack = BinaryToString(TCPRecv($socket,100,0))
MsgBox(0,"info",$ack)    ;显示回显信息,这里则返回乱码,正常应显示Username:
If StringInStr($ack,"0xFFFD18FFFB01FFFE01FFFB03FFFB00FFFD00",1)=0 Then 
        MsgBox(48,"Error","连接到SMBridge服务器时登陆失败,程序将退出!")
        TCPCloseSocket($socket)        
        TCPShutdown()        
        Exit
EndIf
 楼主| 发表于 2012-5-30 09:30:58 | 显示全部楼层
往下继续写发现另外一个问题,通过telnet登陆SMBridge服务器后无法获取回显信息(如telnet到网络设备192.168.1.1,再从192.168.1.1 telnet到192.168.1.2,则无法获取192.168.1.2的回显信息)
发表于 2012-5-30 10:01:49 | 显示全部楼层
回复 5# fuinei
接收端最好用循环接受模式,再检查一下发送端的代码是否正确,你可以在发送端也用二进制形式发送,接收端把二进制转换为字符串。

while 1
$ack = TCPRecv($Socket_received,200,1)
if $ack <> "" then
    $ack = BinaryToString($ack)
    MsgBox(0,"info",$ack)
endif
sleep(100)
wend
发表于 2012-5-30 10:13:42 | 显示全部楼层
回复 5# fuinei
好像你接受到的字符串不是Username:,请看下面的代码,如果是"Username:", 则二进制代码不是你所看到的。
; Binary ANSI to String
$buffer = StringToBinary("Username:")
MsgBox(4096, "String() representation" , $buffer)
$buffer = BinaryToString($buffer)
MsgBox(4096, "BinaryToString() ANSI representation" , $buffer)

; Binary UTF16-LE to String
$buffer = StringToBinary("Username:", 2)
MsgBox(4096, "String() representation" , $buffer)
$buffer = BinaryToString($buffer, 2)
MsgBox(4096, "BinaryToString() UTF16-LE representation" , $buffer)

; Binary UTF16-BE to String
$buffer = StringToBinary("Username:", 3)
MsgBox(4096, "String() representation" , $buffer)
$buffer = BinaryToString($buffer, 3)
MsgBox(4096, "BinaryToString() UTF16-BE representation" , $buffer)

; Binary UTF8 to String
$buffer = StringToBinary("Username:", 4)
MsgBox(4096, "String() representation" , $buffer)
$buffer = BinaryToString($buffer, 4)
MsgBox(4096, "BinaryToString() UTF8 representation" , $buffer)
 楼主| 发表于 2012-6-1 10:03:31 | 显示全部楼层
回复 7# xms77

谢谢该方式返回值仍为? ?,无法识别的代码,真奇怪~
 楼主| 发表于 2012-6-1 10:08:02 | 显示全部楼层
回复 8# xms77

谢谢xms77兄的指导,看来这种方式获取SMbridge返回的结果是有问题的,目前已改为在本机安装Smbridge直接运行命令的方式实现,谢谢!
发表于 2013-7-25 23:03:52 | 显示全部楼层
我现在从telnet 服务器 TCPRecv 接收回来的数据是 binary的,但是用 BinaryToString转换出来的还是乱码
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-28 23:32 , Processed in 0.119162 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表