002转载----C# 基于OneNet 的物联网数据通信

作者:lnwin521 
来源:CSDN 
原文:https://blog.csdn.net/lnwin521/article/details/84549606 
(遇到404情况请复制粘贴后再打开)
版权声明:本文为博主原创文章,转载请附上博文链接!

 

首先非常感谢这位大佬的文章,对于连接onenet很有用。

 

C# 基于OneNet 的物联网数据通信

本篇简介包含两部分:1、数据向OneNet平台的上传;2、数据从OneNet平台的下载。

1、数据向OneNet平台的上传

1.1 上传数据采用POST方式:

 1  public void Post()
 2         {
 3             pictureBox1.BackColor = Color.Gray;
 4             string url = "http://api.heclouds.com/devices/503683965/datapoints?";
 5             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
 6             request.Method = "POST";
 7             SetHeaderValue(request.Headers, "api-key", "dTOsflbiN1YGgUjIgNYjY3TBigw=");//设备API地址和 首部参数
 8             request.Host = "api.heclouds.com";
 9             request.ProtocolVersion = new Version(1, 1);
10             string Cod = "{\"datastreams\":[{\"id\":\"temperature\",\"datapoints\":[{\"value\":\"" + textBox4.Text + "\"}]},{\"id\":\"RH\",\"datapoints\":[{\"value\":\"" + textBox5.Text + "\"}]},{\"id\":\"state\",\"datapoints\":[{\"value\":\"" + textBox3.Text + "\"}]}]}";
11             byte[] data = Encoding.UTF8.GetBytes(Cod);
12             request.ContentLength = data.Length;
13             using (Stream reqStream = request.GetRequestStream())
14             {
15                 reqStream.Write(data, 0, data.Length);
16                 reqStream.Close();
17             }
18 
19             HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
20             Stream stream = resp.GetResponseStream();
21             //获取响应内容 
22             using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
23             {
24                 textBox6.Text = reader.ReadToEnd();
25                 pictureBox1.BackColor = Color.Lime;
26             }
27             // return result;
28         }//面向OneNet的发送

 

1.2 HTTP协议报文头编辑函数

 1  public static void SetHeaderValue(WebHeaderCollection header, string name, string value)// HTTP协议报文头加入
 2 
 3         {
 4             var property = typeof(WebHeaderCollection).GetProperty("InnerCollection", BindingFlags.Instance | BindingFlags.NonPublic);
 5             if (property != null)
 6             {
 7                 var collection = property.GetValue(header, null) as NameValueCollection;
 8                 collection[name] = value;
 9             }
10         }

 

2、数据从OneNet平台的下载

2.1 数据获取采用Get模式

 1  private void Get(object sender, EventArgs e)//连接服务器并获取数据
 2         {
 3             
 4             string url = "http://api.heclouds.com/devices/503683965/datapoints?";//设备地址
 5             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
 6             request.Method = "GET";
 7             SetHeaderValue(request.Headers, "api-key", "dTOsflbiN1YGgUjIgNYjY3TBigw=");//设备API地址和 首部参数
 8             request.Host = "api.heclouds.com";
 9             request.ProtocolVersion = new Version(1, 1);
10             request.ContentType = "text/html;charset=UTF-8";
11             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
12             Stream myResponseStream = response.GetResponseStream();
13             StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
14             string retString = myStreamReader.ReadToEnd();
15             myStreamReader.Close();
16             myResponseStream.Close();
17             textBox5.Text = retString;
18            
19 
20         }

 

2.2 HTTP协议报文头编辑

 1  public static void SetHeaderValue(WebHeaderCollection header, string name, string value)// HTTP协议报文头加入
 2 
 3         {
 4             var property = typeof(WebHeaderCollection).GetProperty("InnerCollection", BindingFlags.Instance | BindingFlags.NonPublic);
 5             if (property != null)
 6             {
 7                 var collection = property.GetValue(header, null) as NameValueCollection;
 8                 collection[name] = value;
 9             }
10         }

 

 

之前自己做的一个小程序,可以参考:https://download.csdn.net/download/lnwin521/10808227

 

 

 

/********************************神奇的分割线********************************/

那么当下载原文大佬的资源后,我们得到两个C#的源码

 

1. 分析了Monitor里面的源码,在onenet中使用的是HTTP协议

2. 将源码中的设备地址和秘钥替换成自己云端中去,程序中有两个的地方都要替换

云端的:

程序中的:

 

3. 将源码中的一部分程序注销掉,因为我们云端没有这个东西,不然的话程序运行会出现错误

1. 

2. 

 

3. 将源码注销之后运行点击自动运行就OK了,就可以看到我们云端的数据了

 

4. 得到云端数据之后那就好办了,用我们以前学的知识来进行制作我们的应用软件

忘记了的可以看。

001_C#我的第一个串口上位机软件

 /********************************神奇的分割线********************************/

posted @ 2018-12-19 11:17  陆小果哥哥  阅读(3497)  评论(1编辑  收藏  举报