2013-10-22 91 views
1

在軟件數據流控制的情況下,我們使用xon和xoff(0x11和0x13)標準字符來暫停和恢復傳輸。但是如果我們想發送包含與xon和xoff的ascii值匹配的字符的二進制數據,我們應該使用什麼字符集來發送xon或xoff?如何在二進制數據的情況下發送xon/xoff?

+0

您需要設計一個應用程序協議,允許您對控制字符進行編碼,而不是將其原始發送。 – Barmar

+0

*「我們應該使用什麼字符集來發送xon或xoff」* - Termios會讓您(重新)定義軟流量控制的值,但這對傳輸二進制數據沒有幫助。要麼編碼所有的二進制數據(例如uuencode/uudecode,英特爾或摩托羅拉十六進制)或使用「轉義」字符序列(以便匹配XON&XOFF的數據可以「轉義」或編碼)。 – sawdust

回答

0

使用軟件握手阻止發送二進制數據。

對於做一些深奧的事情(發送9位/字節而不是8位 - 非常不標準),256個不同的二進制數據中的2個和被選擇用作XON/XOFF的2個代碼沒有區別。

有各種協議試圖解決這個問題。它們都將「二進制數據」編碼爲高效的,但不是一對一的映射。可以使用轉義碼,壓縮,數據包等。當然,通信的兩端都需要知道如何編碼/解碼。這往往限制你的選擇。如果有疑問,從二進制到文本編碼開始,因爲它更容易調試。 http://en.wikipedia.org/wiki/Binary-to-text_encoding

1

我簡單的解決方法是使用base64編碼,你有它在蟒蛇..

base64.b64encode(yourData) - encode 
base64.b64decode(yourData) - decode, 

它增加了額外的開銷,但發送的數據是簡單的字符格式。即使HDLC使用base64,所以這將是我想你的一個選擇。

相關問題