2011-06-24 61 views
1

問題保持套接字打開一次和發送/接收消息多次

我有從套接字客戶端收到stream C#應用程序,檢索流之後,我需要接受另一stream通過發送在客戶端,

目前代碼

int length= this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None); 

// saves the first file ..... 

    length= this.DataSocket.Receive(this.buffer, this.buffer.Length, SocketFlags.None); 

詳細

IM確保從插座客戶端,但第一個文件後即時將數據寫入接收第二DataSocket.Receive沒有stream在收到..任何想法?

+0

你是在分隔消息嗎?使用長度前綴? –

+0

是的,其實我需要這樣做! – Sudantha

回答

3

網絡流隔離沒有自動隔離消息 - 它只是字節。因此,需要手動分割; 編寫最方便的是在記錄之間使用已知的分隔符。最方便閱讀的是在每封郵件前面添加下一封郵件中要讀取的字節數。

您需要使用這些信息來讀取整個消息,否則讀數會變得瘋狂。在這種情況下,我懷疑你在第一個Receive中同時讀取了完全的消息,現在沒有更多的數據 - 因此阻塞(它必須阻塞,直到至少有一個字節可以被讀取或關閉)。

另外 - 請注意,因爲您閱讀並不意味着您有一個完整的消息 - 至少有一個字節。您通常需要循環才能獲取消息。

+0

තැන්ක්ස්感謝使用手動分隔符解決問題 – Sudantha

相關問題