[已解决]关于TCPRecv返回内容的问题
本帖最后由 fuinei 于 2012-6-1 10:09 编辑各位好,使用TCPRecv接收SMBridge返回的字符串时出现问题,正常应返回“Username:”,但实际上返回“0xFFFD18FFFB01FFFE01FFFFB03FFFB00FFFD00”,请问各位知道如何解决这个问题吗? 请用BinaryToString()转化接收到的 回复 2# xms77
使用BinaryToString()转化接收到的字符,Username:转化为? ? ? ?结果仍然不正确 回复 3# fuinei
可否上码看看先? 回复 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
往下继续写发现另外一个问题,通过telnet登陆SMBridge服务器后无法获取回显信息(如telnet到网络设备192.168.1.1,再从192.168.1.1 telnet到192.168.1.2,则无法获取192.168.1.2的回显信息) 回复 5# fuinei
接收端最好用循环接受模式,再检查一下发送端的代码是否正确,你可以在发送端也用二进制形式发送,接收端把二进制转换为字符串。
while 1
$ack = TCPRecv($Socket_received,200,1)
if $ack <> "" then
$ack = BinaryToString($ack)
MsgBox(0,"info",$ack)
endif
sleep(100)
wend 回复 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) 回复 7# xms77
谢谢该方式返回值仍为? ?,无法识别的代码,真奇怪~ 回复 8# xms77
谢谢xms77兄的指导,看来这种方式获取SMbridge返回的结果是有问题的,目前已改为在本机安装Smbridge直接运行命令的方式实现,谢谢! 我现在从telnet 服务器 TCPRecv 接收回来的数据是 binary的,但是用 BinaryToString转换出来的还是乱码
页:
[1]