zoukankan      html  css  js  c++  java
  • HttpListener通讯成功案例

    1、创建WindowsService,如下代码

    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading;

    namespace WindowsService
    {
    public partial class Service1 : ServiceBase
    {
    public Service1()
    {
    InitializeComponent();
    }

    public static int TerminalPort = 12800;
    public static Thread ListeningThread;
    public static int Port;
    public static Encoding Encoding;

    protected override void OnStart(string[] args)
    {
    InitialAcceptor(TerminalPort);
    }

    protected override void OnStop()
    {
    }

    public void DebugTest()
    {
    Console.WriteLine("StartService...");
    InitialAcceptor(TerminalPort);
    Console.WriteLine("Terminal Listened on Port=" + TerminalPort);
    }

    public void InitialAcceptor(int tunnelPort)
    {
    Port = tunnelPort;

    Encoding = Encoding.UTF8;

    ListeningThread = new Thread(new ThreadStart(StartListening));

    ListeningThread.IsBackground = Environment.OSVersion.Platform != PlatformID.Unix;//
    ListeningThread.Start();

    }


    #region MyRegion
    //internal void StartListening()
    //{
    // try
    // {
    // while (true)
    // {
    // try
    // {
    // listener = new HttpListener();
    // listener.Prefixes.Add("http://+:" + Port + "/");
    // listener.Start();
    // }
    // catch
    // {
    // Thread.Sleep(1000);
    // }

    // try
    // {
    // while (true)
    // {
    // IAsyncResult result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
    // result.AsyncWaitHandle.WaitOne();
    // }
    // }
    // catch (Exception e)
    // {
    // }
    // }
    // }
    // catch
    // {
    // }
    //}
    #endregion
    internal void StartListening()
    {
    try
    {
    while (true)
    {
    try
    {
    #region MyRegion
    //服务端:
    //var listener = new HttpListener();
    //listener.Prefixes.Add("http://*:8080/");
    //listener.Start();

    HttpListener listener = new HttpListener();
    listener.Prefixes.Add("http://+:" + 1234 + "/");
    listener.Start();

    while (true)
    {
    IAsyncResult result = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
    result.AsyncWaitHandle.WaitOne();
    }
    #endregion
    }
    catch
    {
    Thread.Sleep(1000);
    }
    }
    }
    catch
    {
    }
    }
    private void ListenerCallback(IAsyncResult result)
    {
    HttpListener listener = (HttpListener)result.AsyncState;
    HttpListenerContext context = listener.EndGetContext(result);
    processRequest(context);

    }

    private void processRequest(HttpListenerContext context)
    {
    HttpListenerRequest request = context.Request;
    try
    {
    //string url = System.Web.HttpUtility.UrlDecode(request.RawUrl);
    string ss = request.QueryString["eid"];
    context.Response.ContentEncoding = UTF8Encoding.UTF8;
    context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
    //context.Response.ContentType = "image/jpg";
    //context.Response.ContentLength64 = buffer.Length;
    var output = context.Response.OutputStream;
    byte[] nn = System.Text.Encoding.Default.GetBytes("qqqqqqqqqqqq");
    output.Write(nn, 0, nn.Length);
    output.Close();
    }
    catch (Exception e)
    {

    }
    finally
    {
    }
    }

    }
    }

    2、创建控制台,测试启动WindowsService服务

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;
    using WindowsService;

    namespace WindowsService1TestConsole
    {
    class Program
    {
    static void Main(string[] args)
    {
    try
    {
    Service1 service1 = new Service1();
    #if DEBUG
    service1.DebugTest();
    #endif
    Thread.CurrentThread.IsBackground = false;
    Thread.Sleep(Timeout.Infinite);
    }
    catch (Exception e)
    {
    Console.WriteLine(e.Message);
    Console.WriteLine(e.Source);
    Console.WriteLine(e.StackTrace);
    Console.WriteLine(e.InnerException != null ? e.InnerException.ToString() : "");
    Console.ReadLine();
    }
    }

    }
    }

    3、测试http请求

              直接 地址栏输入:http://127.0.0.1:1234/?eid=30

              结果:qqqqqqqqqqqq

    写测试代码

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
    request.Method = "GET";
    request.ContentType = "text/html;charset=UTF-8";

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream myResponseStream = response.GetResponseStream();
    StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
    string retString = myStreamReader.ReadToEnd();//返回结果
    myStreamReader.Close();
    myResponseStream.Close();

  • 相关阅读:
    批量修改数据后应收集统计信息
    this,this,再次讨论javascript中的this,超全面
    javascript中的闭包,超简单论述,保证小学生必懂
    有四中方法可以实现PHP的伪静态,你造吗?
    javascript 事件传播与事件冒泡,W3C事件模型
    浅谈asp.net性能
    div浮动层 兼容IE FF
    我们这些程序员
    c++学习笔记_1
    windows下hexo+github搭建个人博客
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/9968640.html
Copyright © 2011-2022 走看看