using System; using System.Linq; using System.Web; //using HDL_ON.UI; namespace HDL_ON.DAL.Net { public static class HttpListener { private static System.Net.HttpListener listener; /// /// 启动监听及处理 /// public static void Start(System.Net.IPAddress ipAddress, int port) { try { if (listener == null) { listener = new System.Net.HttpListener(); listener.AuthenticationSchemes = System.Net.AuthenticationSchemes.Anonymous; //listener.Prefixes.Add (string.Format ("http://{0}:{1}/", ipAddress.ToString (), port)); listener.Prefixes.Add($"http://+:{port}/"); listener.Start(); //beginGetContext(listener); contextThread = new System.Threading.Thread(() => { while (true) { var context = listener.GetContext(); System.Threading.Tasks.Task.Run(() => { manager(context); }); } }) { IsBackground = true }; contextThread.Start(); MainPage.Log("HttpListener已经启动!"); } } catch (Exception e) { MainPage.Log("HttpListener启动失败!\r\n" + e.Message); } } /// /// /// static System.Threading.Thread contextThread; /// /// 请求事件 /// /// 请求命令 /// 输出流 /// 输入流 public delegate void RequestEventHandler(System.Collections.Specialized.NameValueCollection nameValueCollection, System.IO.Stream outputStream, System.IO.Stream inputStream); /// /// 请求事件 /// public static event RequestEventHandler EventHandler; /// /// 开始异步接收http请求 /// /// private static void beginGetContext(System.Net.HttpListener listerner) { try { if (listerner == null || !listerner.IsListening) { return; } listerner.BeginGetContext(new System.AsyncCallback(getContextCallBack), null); } catch { System.Threading.Thread.Sleep(1); beginGetContext(listerner); } } /// /// 获取http请求,并处理 /// /// private static void getContextCallBack(System.IAsyncResult ar) { beginGetContext(listener); try { System.Net.HttpListenerContext context = listener.EndGetContext(ar); manager(context); } catch { } } /// /// 关闭 /// public static void Close() { try { if (contextThread != null) { contextThread.Abort(); contextThread = null; } } catch { } try { if (listener != null) { listener.Close(); listener = null; } } catch { } MainPage.Log("HttpListener已经关闭!"); } private static void manager(System.Net.HttpListenerContext httpListenerContext) { System.Net.HttpListenerResponse httpListenerResponse = null; try { #region httpListenerResponse = httpListenerContext.Response; httpListenerResponse.StatusCode = 200;//设置返回给客服端http状态代码 httpListenerResponse.ContentEncoding = System.Text.Encoding.UTF8; if (EventHandler != null) { EventHandler(HttpUtility.ParseQueryString(System.IO.Path.GetFileName(httpListenerContext.Request.RawUrl)), httpListenerResponse.OutputStream, httpListenerContext.Request.InputStream); } httpListenerResponse.OutputStream.Flush(); #endregion } catch { } finally { #region try { httpListenerContext.Request.InputStream.Close(); } catch { } try { httpListenerResponse.OutputStream.Close(); } catch { } try { httpListenerResponse.Close(); } catch { } #endregion } } public static void PostData(string url, string postJson) { System.IO.Stream outputStream = null; System.IO.Stream inputStream = null; try { System.Net.HttpWebRequest webReq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(new Uri(url)); webReq.Method = "POST"; //webReq byte[] byteData = System.Text.Encoding.UTF8.GetBytes(postJson); //定义传送数据格式 webReq.ContentType = "application/json"; webReq.Accept = "application/json"; //webReq.ContentType = "application/x-www-form-urlencoded"; //webReq.Timeout = 1000*2; webReq.ContentLength = byteData.Length; //定义Stream信息 outputStream = webReq.GetRequestStream(); outputStream.Write(byteData, 0, byteData.Length); outputStream.Flush(); outputStream.Close(); //inputStream= webReq.GetResponse().GetResponseStream(); } catch { throw new Exception("发送失败"); } finally { if (null != outputStream) { outputStream.Close(); } if (null != inputStream) { inputStream.Close(); } } } } }