2016-07-21 17 views
0

首先,我目前做:如何評估一個流(串)所有的

我聞有9位協議的asyncron串行總線和數據發送到PC。在PC端,我以無限串接收數據,如下所示:.12_80E886.02_80E894.13。 PC端的軟件是用C#編寫的winforms。現在我遇到了一個問題,我沒有一個清晰的開始,你可以在流示例中看到它。原因是,我在協議的某個地方開始嗅探。

我想做什麼:

我認爲我可以使用startindex = IndexOf("_"),現在它們設置爲新的起點。我必須在流構建的流中評估符號:_(時間戳以毫秒爲單位)(地址字節數據位)。唯一我想在我的RichTextBox中顯示的是databyte,我也需要一個數據管理方法來獲取時間戳。因爲我在GUI中具有可以看到兩個或多個數據字節之間時間的功能,因此我認爲我可以創建一個sql數據庫。 addressbyte需要我用一個地址在特定的collor中對字節進行collor。

問:

如何評估數據流,使我有交替時間戳, addressbyte比數據字節爲單子?

爲什麼我要他們這麼做的原因是,我認爲我可以做一個簡單的else if else塊來實現我想做的所有事情。

當有人對我的項目有更好的建議時,請將它寫爲評論。

隨着友好的願望sniffi

回答

0

我想你想同時解決兩個問題。將它們分開並單獨解決將會更好。

  1. 存在傳輸數據的問題,因爲您使用的是流。這是一個有效的解決方案。在流上發送和接收數據(比特)。

  2. 你有這些位(接收它們後)轉換成實際的對象(日期,字符串等)的問題。爲此,您需要使用一個簡單的解析器,tokenizer,一個可以從數據中獲取正確部分並將其轉換的本地腳本,或者您可以使用序列化框架(如DataContracts)。

如果你有簡單的數據,我會選擇使用一個可以解析數據的方法。對於更復雜的場景,我會考慮序列化。

此外,由於您不能假定總是有一個將比特發送給您的受信任(未受損)的軟件,因此您需要驗證輸入。

0

我覺得字符串是不好的選擇。數據以字節形式發送。嗅探而不是字符串的字節。你需要協議描述來理解數據。 您需要讀取總線字節並解釋它。

+0

問題是當我將它作爲字節發送時,我無法設置明確的開始。因爲我的開頭字母也是字節,我永遠不能說是時間戳的一部分,還是開始標誌。我已經做了測試,但我沒有找到一個方法來設置一個明確的開始,知道你的可能性? – sniffi

+0

heve你協議desription? – BWA

+0

不是我的工作只是接收它們並將它們顯示在窗口中,但必須能夠詢問2個字節之間的時間,並且我必須用第9個地址位對該字節進行合併。 – sniffi