2016-12-29 152 views
0

即使我在接收端配置了使用fconfigure $s -translation binary的Tcl服务器套接字,我也会收到0x0A(LF)作为消息的最后一个字节。 如何避免它?LF将数据发送到套接字

编辑: 其转换十六进制字符串为二进制数据并发送它的代码:

set tm_packet [binary format H* $tm_packet] 
global sock 
if {$sock != 0} { 
    if {[catch {puts $sock $tm_packet} result]} { 
     syslog "ErrorMsg: $result" 
     close $sock 
     set sock 0 
    } 
    flush $sock 
} 

哪里tm_packet是十六进制值的序列,例如:10b9a5

在客户端10b9a50a在接收那种情况。

+0

一般来说,你必须确保两端的通信协议达成一致。如果一端将数据视为文本并附加一个LF,则您在协议中存在分歧。 –

+0

@BradLanam我同意。我只是不想在源端添加一个LF。 – bLAZ

+1

'flush'也可以抛出异常,实际上它比'puts'更有可能。 – EJP

回答

1

puts命令会自动附加一个换行符到输出。

为了防止这种二进制数据,使用-nonewline选项:

if {[catch {puts -nonewline $sock $tm_packet} result]} { 

参考文献:puts

+0

啊,对,就是这样!非常感谢! – bLAZ