2016-12-29 151 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