fuinei 发表于 2012-5-28 12:38:05

[已解决]关于TCPRecv返回内容的问题

本帖最后由 fuinei 于 2012-6-1 10:09 编辑

各位好,使用TCPRecv接收SMBridge返回的字符串时出现问题,正常应返回“Username:”,但实际上返回“0xFFFD18FFFB01FFFE01FFFFB03FFFB00FFFD00”,请问各位知道如何解决这个问题吗?

xms77 发表于 2012-5-28 13:03:56

请用BinaryToString()转化接收到的

fuinei 发表于 2012-5-29 17:58:58

回复 2# xms77

使用BinaryToString()转化接收到的字符,Username:转化为? ? ? ?结果仍然不正确

xms77 发表于 2012-5-29 21:07:54

回复 3# fuinei
可否上码看看先?

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

fuinei 发表于 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的回显信息)

xms77 发表于 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

xms77 发表于 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)

fuinei 发表于 2012-6-1 10:03:31

回复 7# xms77

谢谢该方式返回值仍为? ?,无法识别的代码,真奇怪~

fuinei 发表于 2012-6-1 10:08:02

回复 8# xms77

谢谢xms77兄的指导,看来这种方式获取SMbridge返回的结果是有问题的,目前已改为在本机安装Smbridge直接运行命令的方式实现,谢谢!

popoasd123 发表于 2013-7-25 23:03:52

我现在从telnet 服务器 TCPRecv 接收回来的数据是 binary的,但是用 BinaryToString转换出来的还是乱码
页: [1]
查看完整版本: [已解决]关于TCPRecv返回内容的问题