none
關於一個網路接收程式的問題! RRS feed

  • 問題

  • 我想將網路所接收到的串流存到一個記憶體!可以提供給另一個執行緒來做資料的處理

    我現在是將收到的資料存到List<T>

    但卻出現一個問題!

    舉例:

    伺服器傳送的資料

    1,1,1,1,1,1,1,1

    2,2,2,2,2,2,2,2

    3,3,3,3,3,3,3,3

    4,4,4,4,4,4,4,4

    5,5,5,5,5,5,5,5

    6,6,6,6,6,6,6,6

     

    socket收到時寫入List(假如分成3次收到並存入List)

    第一次

    1,1,1,1,1,1,1,1

    2,2,2,2,2,2,2,2

    第二次

    3,3,3,3,3,3,3,3

    4,4,4,4,4,4,4,4

    5,5,5,

    第三次

    5,5,5,5,5

    6,6,6,6,6,6,6,6

     

    這樣在計算時會出現錯誤!而且隨著List的增加所使用的記憶體也會隨之增長!@@

    有沒有甚麼方法可以在資料計算之後也一起釋放記憶體!

    請問各位高手有沒有甚麼比較好的建議(方向)可以提供給我~謝謝!

    2008年2月29日 上午 09:00

解答

所有回覆

  •  不知道有沒有甚麼方法可把收到的串流暫存在一個記憶體

    然後再另外一個執行緒去處理收到的資料!

     

    2008年3月1日 下午 02:03
  • 你可以宣告一個靜態或公用的 MemoryStream ,將 NetworkStream 的資料寫到 ms 即可。

     

    2008年3月1日 下午 03:03
  • 謝謝璉璉大哥的解答!

    找了一下有關MemoryStream的用法!

    我先說明一下程式流程~

    Server -- 傳送即時資訊 --> "網路接收程式" --> 傳送到Client端

     

    把"網路接收程式"拉出來細分

         串流      -->      接收      -->   存入MemoryStream --> 解析 --> 傳給Client端

    (一直傳送)        (一直接收)         (另一個thread處理數據邊處理邊送給Client端)

                                                     (MemoryStream 會處於邊讀邊寫的狀態)

     

    講簡單一點就有點像訊息廣播的程式

    SERVER會一直傳訊息出來!但有些訊息並不是要給CLIENT端的

    所以要做一點資料的處理處理

     

    MemoryStream有看到BeginRead BeginWrite應該可以實現我所想要的

    不過網路上似乎很少有這類的說明!

    不知道可不可以給我一個方向好讓我去研究!

    還是說撰寫網路訊息廣播程式還有更好的想法及做法可以提出來一起討論!

    謝謝!

    2008年3月1日 下午 06:06
  • 方法很多,這只是其中之一。

     

    相關討論 vb 版也有很多,比如說這是其中一篇的範例討論:

    http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=1024049&SiteID=14

     

    2008年3月2日 上午 01:40
  • 謝謝謝謝!

    真的是太感謝了!

    我在去研究一下!!

    有問題在上來發問!

    謝謝!

    2008年3月2日 上午 04:38