我想使用流類從串口讀取/寫入數據。我使用BaseStream獲取流(下面的鏈接),但Length屬性不起作用。有誰知道我怎麼能讀取完整的緩衝區,而不知道有多少字節?如何從SerialPort.BaseStream中讀取不帶長度的字節
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.basestream.aspx
我想使用流類從串口讀取/寫入數據。我使用BaseStream獲取流(下面的鏈接),但Length屬性不起作用。有誰知道我怎麼能讀取完整的緩衝區,而不知道有多少字節?如何從SerialPort.BaseStream中讀取不帶長度的字節
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.basestream.aspx
你不能。也就是說,如果您擁有的是BaseStream
,則無法保證您收到了所有內容。
有兩種方法,你可以知道你是否已經收到了一切:
或者,根據您的應用程序,您可以進行某種計時。也就是說,如果您在X秒(或毫秒)內沒有收到任何新消息,則認爲您已收到一切。如果發件人速度特別慢,這就有一個顯而易見的缺點,即不能很好地工作。
也許你可以試試SerialPort.BytesToRead財產。
我想用流來做。我無法使用數據將SerialPort類傳遞到類中,但我可以使用流對象。 –
這會有點困難。串口編程的一個特點是,你無法精確地分辨出通過端口的數據的*長度。您可能必須通過嘗試讀取少量字節並將其緩存在緩衝區中來實現自己的緩衝系統。 – nim
記錄分隔符通常與二進制數據結合使用*字節填充*。就我個人而言,我將這兩種方法結合在一起使用,它允許在發生錯誤後重新同步。 –
@BenVoigt:好點。 –
我正在使用我無法操作的通信協議。 :( –