C# WinForms ve Mono GTK Console Sistem ve Servis Programlama Networking ve İnternet Yazılım ve Sistem Güvenliği

c# Http Server

Eğer bir geliştirici iseniz IIS, apache, wamp vs tanımlarını elbetteki duymuşsunuzdur. Peki bunların arkaplanda yaptıklarını kontrol etmek veya performansı elle kontrol edebilmek ister miydiniz?

Aşağıdaki kodlar c# ile http server yapmaya olanak sağlamaktadır.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Dynamic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;
using uhttpsharp;
using uhttpsharp.Attributes;
using uhttpsharp.Controllers;
using uhttpsharp.Handlers;
using uhttpsharp.Handlers.Compression;
using uhttpsharp.Headers;
using uhttpsharp.Listeners;
using uhttpsharp.ModelBinders;
using uhttpsharp.RequestProviders;

namespace httpServerTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var httpServer = new HttpServer(new HttpRequestProvider()))
            {
                httpServer.Use(new TcpListenerAdapter(new TcpListener(IPAddress.Any, 82)));
                httpServer.Use(new SessionHandler<dynamic>(() => new ExpandoObject(), TimeSpan.FromMinutes(20)));
                Console.WriteLine("Web server started.");
                Process.Start("http://localhost:82");
                httpServer.Use(new ClassRouter(new IndexHandler()));
                httpServer.Use((context, next) =>
                {
                    Console.WriteLine(context.Request.Headers.GetByName("Host") + " - Client connected.");
                    return next();
                });

                httpServer.Start();
                Console.ReadLine();
            }
        }
    }
    public class IndexHandler : IHttpRequestHandler
    {
        private readonly HttpResponse _response;
        private readonly HttpResponse _keepAliveResponse;

        public IndexHandler()
        {
            string jresult = Newtonsoft.Json.JsonConvert.SerializeObject(new { project_link="metinyakar.net" });
            byte[] contents = Encoding.UTF8.GetBytes(jresult);
            _keepAliveResponse = new HttpResponse(HttpResponseCode.Ok, contents, true);
            _response = new HttpResponse(HttpResponseCode.Ok, contents, false);
        }

        public Task Handle(IHttpContext context, Func<Task> next)
        {
            context.Response = context.Request.Headers.KeepAliveConnection() ? _keepAliveResponse : _response;
            return Task.Factory.GetCompleted();
        }
    }

}

 

 

Çok basit haliyle bir http server örneği vereyim. Bunun için dışarıdan çözel bir kütüphane gerekmiyor. .net framework gerekli araçlara sahip.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;

namespace mynamespace
{
    class Program
    {
        static void Main(string[] args)
        {
            HttpListener http = new HttpListener();
            http.Prefixes.Add("http://publichost:2000/");
            http.Prefixes.Add("http://localhost:2000/");
            http.Start();

            while (true)
            {
                Console.WriteLine("istemci bekliyor.");
                HttpListenerContext cx = http.GetContext();
                Console.WriteLine("istemci bağlandı.");

                HttpListenerRequest req = cx.Request;
                HttpListenerResponse res = cx.Response;

                Console.WriteLine("istenen adres= " + req.Url);
                string veri = DateTime.Now.ToString();
                veri += "</br>" + req.UserAgent;
                byte[] gonderilecek = Encoding.UTF8.GetBytes(veri);
                res.AddHeader("Content-Type", "text/html ; charset=utf-8");
                res.OutputStream.Write(gonderilecek, 0, gonderilecek.Length);
                cx.Response.Close();
            }
        }
    }
}

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir