none
請問接收大量socket..資料連在一起的問題 RRS feed

  • 問題


  • 請問
    我用vb6對c#傳送socket
    因為傳送的速度很快(每秒約10筆以上)

    我的c#接收方式寫這樣

    假設我的資料正常接收到的應該是
    0001xxxxxxxoooooooo
    0001xxxoooooxxxxooo
    0001xxxxxoooxooxoxo
    .................
    ........
    ....

    應該要這樣一筆一筆收過來


    可是速度一變快
    就有可能變成

    0001xxxxxxxoooooooo
    0001xxxoooooxxxxooo
    0001xxxxxoooxooxoxo
    0001xxxxxoooxooxoxo0001ooooooxxxxxooooo
    0001xxoooxxooxoxoxo
    0001ooooooxxxxxoooo0001xxxoooooxxxxxxxx0001xxxoooooxoooooo


    本來應該分開來的"0001為開頭"
    變成這樣子連在一起成一筆bytAcceptMessage[]
    這樣我判斷會判斷錯....

    不知道要如何避免,才能保證收到的資料都是分開來的?


                    bool clientStopRun = false;
    
                    while (!clientStopRun)
                    {
                        if (networkstream.CanRead)
                        {
                            byte[] bytAcceptMessage = new byte[tcpClient.ReceiveBufferSize];
                            int bytesRead = networkstream.Read(bytAcceptMessage, 0, bytAcceptMessage.Length);
    
                            if (bytesRead > 0)
                            {
                                Console.WriteLine(bytesRead);
    
                            }
                        }
                        else
                        {
                            clientStopRun = true;
                        }
                    }
    2009年11月26日 上午 03:23

解答

  • 誰告訴你應該一筆一筆收?網路傳輸有速度差,程式執行有時間差,為什麼會一筆一筆?

    你無法切割表示你自定的通訊協定不完善。

    參考 RFC 的通訊協定定義,多行都會配合換行符號:CrLf

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Lolota Lee 2009年12月3日 上午 05:20
    2009年11月26日 上午 05:12

所有回覆

  • 所以你要在每筆資料做一個結尾資料做為判斷.
    不然就是每次傳送資料就重新建立連線.
    2009年11月26日 上午 03:54
  • 誰告訴你應該一筆一筆收?網路傳輸有速度差,程式執行有時間差,為什麼會一筆一筆?

    你無法切割表示你自定的通訊協定不完善。

    參考 RFC 的通訊協定定義,多行都會配合換行符號:CrLf

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Lolota Lee 2009年12月3日 上午 05:20
    2009年11月26日 上午 05:12
  • 沒有啦
    是我期盼他能一筆一筆...

    我本來是有想在上面加上頭和尾巴試試看
    不過好像沒成功

    我再試試看好了

    socket沒摸過多久還不熟
    本來是想說不知道c#會不會本身有方式做判別@@
    2009年11月26日 上午 06:39
  • 假如你上課的時候,每隔一分鐘寫 10 個字,不斷行,下課小明跟你借筆記,你認為小明看得懂嗎?

    vb6 送出不斷行的字串,C# 接收是依據網路狀況及 CPU 處理能力而定,有可能收到 0 / 0.3 / 0.7 / 1 / 1.2 / 1.4 / 2.1 / 3.2 ... 行,所以你要定義好你溝通的方式。

    比如說先傳 4 bytes 整數告知接收端字串長度或位元組長度,也是一種交談的方式。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年11月26日 上午 08:43