2014-09-27 52 views
-1

我有兩臺計算機通過串行調制解調器進行通信。 我想在該生產線上有一個可靠性協議。通過串行連接的可靠性

我一直在研究PPP,SLIP和RATP。並不是所有的都是最合適的,我不想編寫所有的代碼,特別是如果在線代碼基礎良好的話。

C#中是否有可用於此目的的庫或代碼項目? 如果您不推薦使用什麼協議來實現?

連接速度爲9600,但發送的數據量不是很大,速度也不是很大的問題。簡單和易於開發!

+0

正常方式做到這一點在一個串行協議是計算該消息的CRC和附加,在該消息的末尾。接收器可以檢查CRC並在不匹配時發送NAK。發件人應通過重新發送消息來響應NAK。當它被正確接收時,它應該發送一個ACK來確認消息已經正確到達。 Google有很多關於如何在C#中實現CRC的示例。但最簡單的方法是將切換到以太網並使用TCP/IP,你會得到錯誤處理的自由... – AVee 2014-09-27 19:42:40

+0

您需要定義你的*「reliabilty」的意思*。首先是信息完整性問題:收到的信息與發送時相同嗎?那麼是否收到所有發送的消息?消息是否按正確的順序接收?是否需要身份驗證(例如,您是否在考慮中間人攻擊)?這些問題並不是每個「可靠」協議都能解決的。 – sawdust 2014-09-27 19:44:49

回答

-1

我總是隻給每條消息添加一個CRC,但是由於未經請求的狀態報告,我的高級協議是自同步和丟失容忍的 - 如果命令丟失並且狀態沒有改變,在下一個州報告。根據您的要求是檢測還是更正錯誤,以及是否可以容忍重傳的額外延遲,您可能需要查看前向糾錯碼。

感興趣概念包括消息序列號,確認,去退N VS選擇性重發,和代碼之間的最小距離(漢明距離)。

我絕對建議你看一下TCP的設計。基本要求非常小,可以保證按訂單交付。

+0

@sawdust:啊,對不起。在您評論之前,我認爲編輯已經在系統中一段時間​​了。無論如何,我同意一些額外的解釋是可取的。不過我肯定行「根據您的要求是否是檢測或糾正錯誤,以及是否可以容忍的重傳延遲外,你可能需要尋找到一個前向糾錯碼。」在第一個版本。 – 2014-09-27 19:53:33