我正在爲通常以500或更少字節的字符串形式發送數據的服務器編寫客戶端。但是,數據偶爾會超過該數據,並且一組數據可能包含200,000個字節,對於所有客戶端都知道(初始化或重要事件)。但是,我想不必讓每個客戶端都運行一個50 MB的套接字緩衝區(如果甚至可能的話)。我應該如何處理不完整的數據包緩衝區?
每組數據都由空字符\0
定界。我應該查看哪種結構來存儲部分發送的數據集?
例如,服務器可能會發送ABCDEFGHIJKLMNOPQRSTUV\0WXYZ\0123!\0
。我想單獨處理ABCDEFGHIJKLMNOPQRSTUV
,WXYZ
和123!
。此外,服務器可以發送ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890LOL123HAHATHISISREALLYLONG
而不包含終止字符。我希望這個數據集存儲在某個地方,以便以後添加和處理。
另外,如果有問題,我正在使用異步套接字方法(BeginSend
,EndSend
,BeginReceive
,EndReceive
)。
目前我在List<Byte>
和StringBuilder
之間辯論。對這兩種情況進行比較將會非常有幫助。
也許是'MemoryStream',而不是'List'?和'stream.Seek(0,SeekOrigin.Begin)'而不是'RemoveRange'。 –
2010-03-15 03:28:54
這也是一種可能性。我想這取決於代碼的結構。如果遇到空終止符,它立即處理消息,則尋找0將正常工作。但是,如果它先讀取所有待處理的套接字數據,然後查找空終止符,則在第一條消息後尋求0將失去所有內容。我假設後者。 – EMP 2010-03-15 06:23:11