none
VWD2008, 使用C#, socket可連續讀取資料並即時更新顯示在網頁上 RRS feed

  • 問題

  • 各位前輩:

                目前我socket程式可讀取到儀器的資料並顯示在網頁上,但目前只能開一次網頁顯示一次資料,如果要再取得新的資料就必須重整畫面,

                如果我不想重整畫面,就能把新的資料顯示在網頁上,應該如何修改呢?   謝謝各位。

      

                 以下是我的程式片段:

    protected void Page_Load(object sender, EventArgs e)
    {
    IPAddress serverIp = IPAddress.Parse("這裡會輸入連接的IP位址");
    
    int serverPort = Convert.ToInt32("這裡會輸入連接的port");
    
    IPEndPoint iep = new IPEndPoint(serverIp, serverPort);
    
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
    socket.Connect(iep);
    
    
    byte[] byteData = new byte[16];
    
    int byteReceive;
    
    int i;
    
    for (i = 0; i < 6; i++)
    {
    
    byteReceive = socket.Receive(byteData, 0, byteData.Length, SocketFlags.None);
    
    Thread.Sleep(1000);
    
    if(byteReceive >= 16)
    {
    TextBox1.Text = Converter.ToString(byteReceive); ////顯示位元數
    
    TextBox2.Text = Encoding.ASCII.GetString(byteData); /////轉換資料格式顯示
    
    TextBox3.Text = BitConverter.ToString(byteData); 
    }
    }
    socket.Close();
    }
    


    2013年4月16日 上午 06:32

解答

  • 給個建議, 我覺得和設備通訊的部份是不該寫在 Web Page 中的.

    你應該寫個  Windows Service (如果 Windows Service 太麻煩, 然後你覺得開個視窗無妨, 也可以用 Console 或 Windows Forms 專案) 和 設備通訊, 把資料寫到 DB (或是某個檔案也行)

    然後你的 Web Application 應該是去讀 DB 的資料就好.


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

    • 已標示為解答 dick78728 2013年4月17日 上午 10:30
    2013年4月16日 下午 01:36
    版主

所有回覆

  • 各位前輩:
            不好意思,目前我用:ScriptManager + UpdatePanel + Timer 三個元件去解決,
            但在測試時發現,一開始打開網頁,資料可以即時的更新,但是只要滑鼠點到網頁就會連線中斷了,
            請問這問題應該如何解決?

            另外,想詢問一下,假設我接收到的資料是3210000000000000 或 322000000000000001,
            我應該如何判斷前面的三個位元是321或322之後,直接把最後兩個位元(00或01)顯示就好了。
     
            麻煩各位前輩了。
    2013年4月16日 上午 07:01
  • 您好,
    請問您說網頁中斷是說Timer就無作用嗎?

    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年4月16日 上午 07:56
  • 您好,

    是與設備的連線中斷。

    2013年4月16日 上午 09:00
  • 您好,
    請問您說網頁中斷是說Timer就無作用嗎?

    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    您好:

        我程式另外加cty{....}與Catch{....},即可把問題解決了,

                當我發出例外狀況時,會在幾秒後重新連線。

                剩下,如何判讀資料然後只顯示我要的位元資料這部分的問題。

               麻煩多指教。

    2013年4月16日 上午 09:37
  • 您好,

    您要的是以下的方式嗎?

    How do you convert Byte Array to Hexadecimal String, and vice versa?


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年4月16日 上午 09:53
  • 給個建議, 我覺得和設備通訊的部份是不該寫在 Web Page 中的.

    你應該寫個  Windows Service (如果 Windows Service 太麻煩, 然後你覺得開個視窗無妨, 也可以用 Console 或 Windows Forms 專案) 和 設備通訊, 把資料寫到 DB (或是某個檔案也行)

    然後你的 Web Application 應該是去讀 DB 的資料就好.


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

    • 已標示為解答 dick78728 2013年4月17日 上午 10:30
    2013年4月16日 下午 01:36
    版主
  • 不要把 WebForm 當成 WinForm ...
    2013年4月16日 下午 03:33
  • 您好,

    您要的是以下的方式嗎?

    How do you convert Byte Array to Hexadecimal String, and vice versa?


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    謝謝亂馬客前輩,我會詳細閱讀資料。
    2013年4月17日 上午 10:32
  • 給個建議, 我覺得和設備通訊的部份是不該寫在 Web Page 中的.

    你應該寫個  Windows Service (如果 Windows Service 太麻煩, 然後你覺得開個視窗無妨, 也可以用 Console 或 Windows Forms 專案) 和 設備通訊, 把資料寫到 DB (或是某個檔案也行)

    然後你的 Web Application 應該是去讀 DB 的資料就好.


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

    謝謝Bill Chung前輩的建議,我會再去閱讀相關的書籍資料。
    2013年4月17日 上午 10:34