none
Socket接收訊息 RRS feed

  • 問題

  • 小弟想請板上大大幫忙

    原本我的socket接收訊息是從網路的資院所取得並寫在要接收的類別

    程式碼如下


    private void ReceiveHandler(IAsyncResult pIAsyncResult)
            {
                ClientSocket.BeginReceive(myReceiveBytes, 0, 8192, 0, new AsyncCallback(ReceiveHandler), MySocket);
                int InBytes;
                InBytes = ClientSocket.EndReceive(pIAsyncResult);
                if (InBytes > 0)
                {
                    string myString = "";
                    myString = Encoding.GetEncoding(950).GetString(myReceiveBytes);
                    myString = myString.TrimEnd();
                    DisplayMsg1(myString);
                }

                ClientSocket.BeginReceive(myReceiveBytes, 0, 8192, 0, new AsyncCallback(ReceiveHandler), MySocket);
            }

    主要在於DisplayMsg1的function

    private void DisplayMsg1(String strReceive)
            {
                SetMsg1Callback d = new SetMsg1Callback(DisplayMsg1);
                if (this.textBox3.InvokeRequired)
                { this.Invoke(d, new Object[] { strReceive }); }
                else
                {
                   tmp=strReceive
                    }*/
                }

            }


    tmp為string型別,

    現在,我要把socket都整個獨立為一個class,可是在撰寫class時發現DisplayMsg1需要textBox3原件,而且把 if (this.textBox3.InvokeRequired)
                { this.Invoke(d, new Object[] { strReceive }); }去掉直接tmp=strReceive好像也有問題,有沒有大大可以提供好方法或是解決方法>"<

    謝謝

    2012年9月1日 上午 04:31

解答

  • 因為你在轉成文字的 Byte 陣列比你收到的大很多.

    你可以把 myString = Encoding.GetEncoding(950).GetString(myReceiveBytes);

    改成

    myString = Encoding.GetEncoding(950).GetString(myReceiveBytes,0,InBytes);

    試試

    另請參閱[Encoding.GetString 方法 (Byte[], Int32, Int32)]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 Shih-Ping 2012年9月2日 上午 07:22
    2012年9月1日 下午 01:51
    版主

所有回覆

  • 這有好幾種方法可以做

    (1) 最簡單的方式, 在你的類別中增加一個型別為 Control 的屬性, 將控制項傳進來

    (2) 使用事件模型

    (3) 用委派當屬性

    (4) 顯示的部份程式碼移到 Form 中

    (5) 總之, 就是把某個東西傳來傳去就是了


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2012年9月1日 上午 04:45
    版主
  • 謝謝Bill大大

    那在請問一下遇到這問題該怎解決?

    我只有傳test結果她後面就一直...

    2012年9月1日 上午 08:00
  • 在 IDE 用逐步執行,看看你每次跑到哪,該變數的內容。

    通常是邏輯錯誤造成。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年9月1日 上午 09:44
  • 因為你在轉成文字的 Byte 陣列比你收到的大很多.

    你可以把 myString = Encoding.GetEncoding(950).GetString(myReceiveBytes);

    改成

    myString = Encoding.GetEncoding(950).GetString(myReceiveBytes,0,InBytes);

    試試

    另請參閱[Encoding.GetString 方法 (Byte[], Int32, Int32)]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已標示為解答 Shih-Ping 2012年9月2日 上午 07:22
    2012年9月1日 下午 01:51
    版主
  • 謝謝Bill大大^^
    2012年9月2日 上午 07:22
  • 這邊每個人都在幫助你, 不是只有我, 尤其心冷大提示的逐步執行是一個好技巧.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年9月2日 上午 08:08
    版主