Facebook RSS Feed
 
.NET Micro Framework: HTTP Web Request ile JSON Veri Göndermek
Tarih: 28.09.2014, Platform: .NET MF 4.3, IDE: Visual Studio 2013, Level: 200

Bir önceki yazımda JSON oluşturmak üzerinde durmuştuk. Şimdi ise oluşturduğumuz JSON verisini HTTP Post Request ile sunucuya göndereceğiz.

Bu uygulama ile sensör verileri toplayıp sunucu üzerinde depolayabilir ve telemetry uygulamaları geliştirebilirsiniz. Veriyi kendi web uygulamanıza gönderebileceğiniz gibi, data.sparkfun.com gibi servislere de gönderebilirsiniz.

Uygulama Kodları

Visual Studio üzerinde .NET Micro Framework Console Application oluşturun ve “JSONPost” olarak isimlendirin. JSON Oluşturmak yazımda olduğu gibi, JSON klasörü oluşturun ve içerisine Json.cs, JsonArray.cs, JsonObject.cs class’larını ekleyin. (Namespace’leri bu projeye göre isimlendirmeyi unutmayın. JSONTest.JSON -> JSONPost.JSON)

Şu haliyle uygulamamız JSON oluşturabilecek kıvamda. Şimdi İnternet’e veri gönderebilmesi için gerekli WebClient’ı ekleyelim.

[C#] WebClient.cs

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace JSONPost
{
    public class WebClient
    {
        public WebClient(String server, Int32 port)
        {
            this._server = server;
            this._port = port;
        }

        String _server;
        Int32 _port;

        public object GetContent(String request)
        {
            const Int32 c_microsps = 1000000;

            // Create a socket connection to the specified server and port.
            using (Socket serverSocket = ConnectSocket(_server, _port))
            {
                // Send request to the server.
                Byte[] bytesToSend = Encoding.UTF8.GetBytes
                    ("GET " + request + " HTTP/1.1\r\n" +
                    "Host: " + _server + "\r\n" +
                    "Connection: Close\r\n\r\n");
                serverSocket.Send(bytesToSend, bytesToSend.Length, 0);

                // Reusable buffer for receiving chunks of the document.
                Byte[] buf = new Byte[1024];

                // Wait up to 10 seconds for initial data to be available
                // Will throw exception if connection closed with no data sent
                DateTime timeoutAt = DateTime.Now.AddSeconds(10);
                while (serverSocket.Available == 0 && DateTime.Now < timeoutAt)
                {
                    System.Threading.Thread.Sleep(100);
                }

                string header = String.Empty;
                string page = String.Empty;

                bool bHeaderReceived = false;
                int offset = 0;
                int size = 1;

                // Poll for data until 10 second time out - 
                // Returns true for data and connection closed
                while (serverSocket.Poll(10 * c_microsps, SelectMode.SelectRead))
                {
                    // If 0 bytes in buffer, then connection is closed, 
                    // or we have timed out
                    if (serverSocket.Available == 0)
                        break;

                    // Zero all bytes in the re-usable buffer
                    Array.Clear(buf, 0, size);

                    // Read a buffer-sized HTML chunk
                    Int32 bytesRead = serverSocket.Receive(buf, offset, size, SocketFlags.None);

                    // If 0 bytes in buffer, then connection is closed
                    if (bytesRead == 0)
                        break;

                    if (bHeaderReceived == false)
                    {
                        header = header + new String(Encoding.UTF8.GetChars(buf));
                        if (buf[0] == '\n' && header.IndexOf("\r\n\r\n") > 0)
                        {
                            bHeaderReceived = true;
                            size = buf.Length;
                        }
                    }
                    else
                    {
                        page = page + new String(Encoding.UTF8.GetChars(buf));
                    }
                }

                return (object)page;
            }
        }

        Socket ConnectSocket(String server, Int32 port)
        {
            // Get server's IP address.
            IPHostEntry h = Dns.GetHostEntry(server);

            // Create socket and connect to the server's IP address and port
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            s.Connect(new IPEndPoint(h.AddressList[0], port));

            return s;
        }
    }
}

Program dosyasına yapacağımız eklentilerle, verileri JSON’a çevirip WebClient aracılığıyla sunucuya göndereceğiz.

[C#] Program.cs

using System;
using Microsoft.SPOT;
using System.IO;
using System.Net;
using System.Text;
using JSONPost.JSON;

namespace JSONPost
{
    public class Program
    {
        public static void Main()
        {
            // JSON Objesi oluşturalım:
            JsonObject jo = new JsonObject();

            // Verileri ekleyelim:
            jo.Add("Temperature", 25.2);
            jo.Add("Humidity", 50.5);

            // JSON'ı gönderilmek için hazırlayalım:
            byte[] d = Encoding.UTF8.GetBytes(jo.ToString());

            // HTTP Web Request'i oluşturalım:
            HttpWebRequest r = (HttpWebRequest)WebRequest.Create(
                @"http://data.sparkfun.com/input/STREAMADRESI");
            r.Method = "POST";
            r.Headers.Add("Phant-Private-Key", "SPARKFUN KEY'İNİ BURAYA EKLEYİN");
            r.ContentType = "application/json";
            r.ContentLength = d.Length;
            r.KeepAlive = false;

            Stream postDataStream = r.GetRequestStream();
            postDataStream.Write(d, 0, d.Length);
            postDataStream.Close();

            HttpWebResponse e = (HttpWebResponse)r.GetResponse();

            r.Dispose();

            // Sonucu yazdıralım:
            Debug.Print((e.StatusCode == HttpStatusCode.OK) ? "Gonderildi" : "Hata Olustu"); 

            //Uygulamayı uyutalım:
            System.Threading.Thread.Sleep(-1);
        }
    }
}

Yukarıdaki kodlar içerisine SparkFun Data Servisi’nden alacağınız URL ve Key’i eklediğinizde, İnternet’e veri göndermeye hazırsınız.

Bir sonraki yazımda Sparkfun’dan Data Stream oluşturmayı anlatacağım. URL ve Key’i bu aşamada elde edeceksiniz.


Ek Dosya: Belirtilmemiş.
Okunma Sayısı: 2616

comments powered by Disqus
 
Hoşgeldiniz!
Son güncelleme: 25.12.2016
-
Yeni Teknik Yazılar
Latte Panda İncelemesi
Turta IoT HAT İncelemesi
USB Gamepad Kullanımı
GPIO Kullanımı
VEML6075 UV Sensör Kullan...
-
İlgili Gruplar
.NET MF ve Gadgeteer FB Grubu
İst. IoT & Wearables Meet-up
-
 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.Copyright © 1999 - 2017, Umut Erkal. Bu materyal, "Creative Commons Public Licence" ile sunulmuştur.
Kaynak göstererek ve ücretsiz olarak, aynı şartlar altında paylaşabilir ve kullanabilirsiniz. | Kullanım Sözleşmesi