小屋創作

日誌2017-07-17 22:57

C# WebRecieve

作者:貓貓風 ฅ●ω●ฅ

.

















這篇所要達成的功能是接收從 arduino WebServer 上面的資料, arduino 的架設 WebServer

的方式在這篇  arduino WebServer  , 主要是用 WebRequest 的方式來接收資料,然後

使用 Substring 來解析取得的資料,擷取需要的部分,以下範例為取得從Server端上傳來的

指定 analog pin 的值呈現在畫面上,之後每秒將取得的值儲存在Log中


  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9. using System.Net;  
  10. using System.IO;  
  11. using System.Threading;  
  12.   
  13. namespace WebRecieve_test  
  14. {  
  15.     public partial class Form1 : Form  
  16.     {  
  17.         private Thread _th;  
  18.         private delegate void updateLabel(string str, Control ctl);  
  19.         private string[] _dataArray = new string[10];  
  20.   
  21.         public Form1()  
  22.         {  
  23.             InitializeComponent();  
  24.         }  
  25.   
  26.         private void Form1_Load(object sender, EventArgs e)  
  27.         {  
  28.             _th = new Thread(ReadData);  
  29.             _th.Start();  
  30.         }  
  31.   
  32.         private void Update_Label(string value, Control ctl)  
  33.         {  
  34.             if (this.InvokeRequired)  
  35.             {  
  36.                 updateLabel uu = new updateLabel(Update_Label);  
  37.                 this.Invoke(uu, value, ctl);  
  38.             }  
  39.             else  
  40.             {  
  41.                 ctl.Text = value.ToString();  
  42.             }  
  43.         }  
  44.   
  45.         private void ReadData()  
  46.         {  
  47.             while(true)  
  48.             {  
  49.                 //將要取得HTML原如碼的網頁放在WebRequest.Create(@”網址” )  
  50.                 WebRequest myRequest = WebRequest.Create(@"http://10.56.66.173/");  
  51.                 //Method選擇GET  
  52.                 myRequest.Method = "GET";    
  53.                 //取得WebRequest的回覆  
  54.                 WebResponse myResponse = myRequest.GetResponse();    
  55.                 //Streamreader讀取回覆  
  56.                 StreamReader sr = new
  57.                 StreamReader(myResponse.GetResponseStream());  
  58.                 //將全文轉成string  
  59.                 string result = sr.ReadToEnd();  
  60.                 //關掉StreamReader  
  61.                 sr.Close();    
  62.                 //關掉WebResponse  
  63.                 myResponse.Close();  
  64.                 //搜尋頭尾關鍵字  
  65.                 string temp_str = "";  
  66.   
  67.                 for (int i = 0; i <= 5; i++)  
  68.                 {  
  69.                     int first = result.IndexOf("analog input" + i + " is </td>
  70.                     <td ALIGN=CENTER");  
  71.                     int last = result.LastIndexOf(" " + i + "</td></tr>");    
  72.                     string HTMLCut = result.Substring(first + 39, last - first - 38);
  73.                     temp_str +=  "analog input"+i+" is "+HTMLCut + "\n";  
  74.                     _dataArray[i] = HTMLCut;  
  75.                     Update_Label(temp_str + "\n", label1);  
  76.                 }  
  77.                 store_data();  
  78.                 Thread.Sleep(1000);  
  79.             }  
  80.         }  
  81.   
  82.         private void store_data()  
  83.         {  
  84.             string str = System.Windows.Forms.Application.StartupPath;  
  85.             string file = str + "\\data\\" + DateTime.Now.Year.ToString() +
  86.             DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() +  
  87.             DateTime.Now.Hour.ToString() + ".log";  
  88.               
  89.             if (Directory.Exists(str + "\\data\\"))  
  90.             {  
  91.                 //資料夾存在  
  92.             }  
  93.             else  
  94.             {  
  95.                 //新增資料夾  
  96.                 Directory.CreateDirectory(str + "\\data\\");  
  97.             }  
  98.   
  99.             if (!System.IO.File.Exists(file))  
  100.             {  
  101.                 FileStream filestream = new FileStream(file, FileMode.Create);  
  102.                 filestream.Close();  
  103.             }  
  104.   
  105.             StreamWriter sw = new StreamWriter(file, true);  
  106.             for(int i = 0 ; i <= 5 ; i++)  
  107.             {  
  108.                 if(i < 5)  
  109.                 {  
  110.                     sw.Write("analog input"+ i+" is " + _dataArray[i] + ",");  
  111.                 }  
  112.                 else  
  113.                 {  
  114.                     sw.Write("analog input" + i + " is " + _dataArray[i]);  
  115.                 }  
  116.             }  
  117.             sw.Write("\r\n");  
  118.             sw.Close();  
  119.         }  
  120.   
  121.   
  122.         private void Form1_FormClosed(object sender, FormClosedEventArgs e)  
  123.         {  
  124.             _th.Abort();  
  125.             _th.Join();       
  126.         }  
  127.     }  
  128. }  


執行結果

arduino 上 呈現的畫面




Client端 每秒接收的畫面





Log中儲存的資料







9

3

LINE 分享

相關創作

碧藍航線 自動戰鬥腳本 v2.2.6杰諾瓦的焰火

碧藍航線 自動戰鬥腳本 v2.2.8 碧海光粼

C# MongoDB Atlas 雲端資料庫建置與教學

留言

開啟 APP

face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】