### 2022-02-21更新
------ #### MyDbV4 V3.0.2202.2101 - *.[新增]新增HttpServer类,可以非常方便的建立http服务器。
This commit is contained in:
parent
4282403900
commit
6342b9db9d
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -8550,6 +8550,95 @@
|
|||
CookieCollection格式的Cookie集合同时也返回String类型的cookie
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpServer">
|
||||
<summary>
|
||||
Http服务器类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpServer.HttpRequestHandler">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="sender"></param>
|
||||
<param name="e"></param>
|
||||
</member>
|
||||
<member name="E:RyWeb.HttpServer.OnHandleGETRequest">
|
||||
<summary>
|
||||
当收到Get事件时激发
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:RyWeb.HttpServer.OnHandlePOSTRequest">
|
||||
<summary>
|
||||
当收到Post事件时激发
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpServer.ListenerHost">
|
||||
<summary>
|
||||
监听的主机,默认是localhost
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpServer.ErrorMessage">
|
||||
<summary>
|
||||
最后一次错误信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.#ctor(System.Int32)">
|
||||
<summary>
|
||||
在此端口建立Http服务类
|
||||
</summary>
|
||||
<param name="port">端口号</param>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.IsRunning">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Start">
|
||||
<summary>
|
||||
开始服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Exit">
|
||||
<summary>
|
||||
退出服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Finalize">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpRequest">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.Url">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.PostData">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.UrlReferrer">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.ReturnHtml">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.StatusCode">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.QuickWeb">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,2 +1,2 @@
|
|||
[Money_Op]
|
||||
hwnd=921334
|
||||
hwnd=3813034
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<root>
|
||||
<list id="LastUpdateTime" Value="2022/1/27 15:20:41" />
|
||||
<list id="LastUpdateTime" Value="2022/2/21 16:14:44" />
|
||||
<list id="UpdateAfterTime" Value="0" />
|
||||
</root>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -8550,6 +8550,95 @@
|
|||
CookieCollection格式的Cookie集合同时也返回String类型的cookie
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpServer">
|
||||
<summary>
|
||||
Http服务器类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpServer.HttpRequestHandler">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="sender"></param>
|
||||
<param name="e"></param>
|
||||
</member>
|
||||
<member name="E:RyWeb.HttpServer.OnHandleGETRequest">
|
||||
<summary>
|
||||
当收到Get事件时激发
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:RyWeb.HttpServer.OnHandlePOSTRequest">
|
||||
<summary>
|
||||
当收到Post事件时激发
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpServer.ListenerHost">
|
||||
<summary>
|
||||
监听的主机,默认是localhost
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpServer.ErrorMessage">
|
||||
<summary>
|
||||
最后一次错误信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.#ctor(System.Int32)">
|
||||
<summary>
|
||||
在此端口建立Http服务类
|
||||
</summary>
|
||||
<param name="port">端口号</param>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.IsRunning">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Start">
|
||||
<summary>
|
||||
开始服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Exit">
|
||||
<summary>
|
||||
退出服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Finalize">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpRequest">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.Url">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.PostData">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.UrlReferrer">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.ReturnHtml">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.StatusCode">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.QuickWeb">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -8523,6 +8523,95 @@
|
|||
CookieCollection格式的Cookie集合同时也返回String类型的cookie
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpServer">
|
||||
<summary>
|
||||
Http服务器类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpServer.HttpRequestHandler">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="sender"></param>
|
||||
<param name="e"></param>
|
||||
</member>
|
||||
<member name="E:RyWeb.HttpServer.OnHandleGETRequest">
|
||||
<summary>
|
||||
当收到Get事件时激发
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:RyWeb.HttpServer.OnHandlePOSTRequest">
|
||||
<summary>
|
||||
当收到Post事件时激发
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpServer.ListenerHost">
|
||||
<summary>
|
||||
监听的主机,默认是localhost
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpServer.ErrorMessage">
|
||||
<summary>
|
||||
最后一次错误信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.#ctor(System.Int32)">
|
||||
<summary>
|
||||
在此端口建立Http服务类
|
||||
</summary>
|
||||
<param name="port">端口号</param>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.IsRunning">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Start">
|
||||
<summary>
|
||||
开始服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Exit">
|
||||
<summary>
|
||||
退出服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Finalize">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpRequest">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.Url">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.PostData">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.UrlReferrer">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.ReturnHtml">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.StatusCode">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.QuickWeb">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -8523,6 +8523,95 @@
|
|||
CookieCollection格式的Cookie集合同时也返回String类型的cookie
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpServer">
|
||||
<summary>
|
||||
Http服务器类
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpServer.HttpRequestHandler">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<param name="sender"></param>
|
||||
<param name="e"></param>
|
||||
</member>
|
||||
<member name="E:RyWeb.HttpServer.OnHandleGETRequest">
|
||||
<summary>
|
||||
当收到Get事件时激发
|
||||
</summary>
|
||||
</member>
|
||||
<member name="E:RyWeb.HttpServer.OnHandlePOSTRequest">
|
||||
<summary>
|
||||
当收到Post事件时激发
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpServer.ListenerHost">
|
||||
<summary>
|
||||
监听的主机,默认是localhost
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpServer.ErrorMessage">
|
||||
<summary>
|
||||
最后一次错误信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.#ctor(System.Int32)">
|
||||
<summary>
|
||||
在此端口建立Http服务类
|
||||
</summary>
|
||||
<param name="port">端口号</param>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.IsRunning">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Start">
|
||||
<summary>
|
||||
开始服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Exit">
|
||||
<summary>
|
||||
退出服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:RyWeb.HttpServer.Finalize">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.HttpRequest">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.Url">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.PostData">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.UrlReferrer">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.ReturnHtml">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:RyWeb.HttpRequest.StatusCode">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:RyWeb.QuickWeb">
|
||||
<summary>
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,4 +1,9 @@
|
|||
### 2022-02-20更新
|
||||
### 2022-02-21更新
|
||||
------
|
||||
#### MyDbV4 V3.0.2202.2101
|
||||
- *.[新增]新增HttpServer类,可以非常方便的建立http服务器。
|
||||
|
||||
### 2022-02-20更新
|
||||
------
|
||||
#### MyDbV4 V3.0.2202.2001
|
||||
- *.[新增]WebDecode类新增UrlToData和GetParam函数。
|
||||
|
|
Binary file not shown.
|
@ -93,7 +93,6 @@ namespace Itrycn_Project2
|
|||
{
|
||||
Application.Exit();
|
||||
}
|
||||
|
||||
private void FrmStart_Shown(object sender, EventArgs e)
|
||||
{
|
||||
ryCommon.Ini ini = new Ini(Soft_ConstInfo.UserDataFolder + "\\Win.dat");
|
||||
|
|
|
@ -136,6 +136,7 @@
|
|||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="RyWeb\HttpHelper.cs" />
|
||||
<Compile Include="RyWeb\HttpServer.cs" />
|
||||
<Compile Include="RyWeb\QuickWeb.cs" />
|
||||
<Compile Include="RyWeb\WebDecode.cs" />
|
||||
<Compile Include="SafeCheck\AES.cs" />
|
||||
|
|
|
@ -32,5 +32,5 @@ using System;
|
|||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
|
||||
// 方法是按如下所示使用“*”: :
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("3.0.2202.2001")]
|
||||
[assembly: AssemblyFileVersion("3.0.2202.2001")]
|
||||
[assembly: AssemblyVersion("3.0.2202.2101")]
|
||||
[assembly: AssemblyFileVersion("3.0.2202.2101")]
|
223
Source/MyDb/RyWeb/HttpServer.cs
Normal file
223
Source/MyDb/RyWeb/HttpServer.cs
Normal file
|
@ -0,0 +1,223 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
namespace RyWeb
|
||||
{
|
||||
/// <summary>
|
||||
/// Http服务器类
|
||||
/// </summary>
|
||||
public class HttpServer
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
public delegate void HttpRequestHandler(object sender, HttpRequest e);
|
||||
/// <summary>
|
||||
/// 当收到Get事件时激发
|
||||
/// </summary>
|
||||
[Description("当收到Get事件时激发")]
|
||||
public event HttpRequestHandler OnHandleGETRequest;
|
||||
/// <summary>
|
||||
/// 当收到Post事件时激发
|
||||
/// </summary>
|
||||
[Description("当收到Post事件时激发")]
|
||||
public event HttpRequestHandler OnHandlePOSTRequest;
|
||||
private HttpListener listener;
|
||||
private Thread httpThread;
|
||||
private volatile bool stopped = false;
|
||||
/// <summary>
|
||||
/// 监听的主机,默认是localhost
|
||||
/// </summary>
|
||||
public string ListenerHost { get; set; } = "localhost";
|
||||
private int port = 19955;
|
||||
/// <summary>
|
||||
/// 最后一次错误信息
|
||||
/// </summary>
|
||||
public string ErrorMessage { get;internal set; } = "";
|
||||
/// <summary>
|
||||
/// 在此端口建立Http服务类
|
||||
/// </summary>
|
||||
/// <param name="port">端口号</param>
|
||||
public HttpServer(int port)
|
||||
{
|
||||
isrunning = false;
|
||||
stopped = false;
|
||||
try
|
||||
{
|
||||
listener = new HttpListener();
|
||||
this.port= port;
|
||||
listener.Prefixes.Add("http://"+ ListenerHost + ":" + port + "/");
|
||||
//listener.Prefixes.Add(HTTPS_PREFIX + HTTPS_PORT + "/");
|
||||
listener.Start();
|
||||
httpThread = new Thread(new ThreadStart(Run));
|
||||
httpThread.Start();
|
||||
isrunning = true;
|
||||
}
|
||||
catch(Exception ex) { ErrorMessage = ex.Message; }
|
||||
}
|
||||
private bool isrunning = false;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool IsRunning()
|
||||
{
|
||||
return isrunning;
|
||||
}
|
||||
/// <summary>
|
||||
/// 开始服务
|
||||
/// </summary>
|
||||
public void Start()
|
||||
{
|
||||
isrunning = false;
|
||||
stopped = false;
|
||||
try
|
||||
{
|
||||
if (listener == null || !listener.IsListening)
|
||||
{
|
||||
listener = new HttpListener();
|
||||
listener.Prefixes.Add("http://"+ ListenerHost + ":" + port + "/");
|
||||
//listener.Prefixes.Add(HTTPS_PREFIX + HTTPS_PORT + "/");
|
||||
listener.Start();
|
||||
}
|
||||
if (httpThread == null || httpThread.ThreadState != ThreadState.Running)
|
||||
{
|
||||
httpThread = new Thread(new ThreadStart(Run));
|
||||
httpThread.Start();
|
||||
}
|
||||
isrunning = true;
|
||||
}
|
||||
catch(Exception ex) { ErrorMessage = ex.Message; }
|
||||
}
|
||||
/// <summary>
|
||||
/// 退出服务
|
||||
/// </summary>
|
||||
public void Exit()
|
||||
{
|
||||
stopped = true;
|
||||
try
|
||||
{
|
||||
if (listener != null)
|
||||
{
|
||||
listener.Stop();
|
||||
listener.Close();
|
||||
}
|
||||
if (httpThread != null)
|
||||
{
|
||||
httpThread.Interrupt();
|
||||
}
|
||||
listener = null;
|
||||
httpThread = null;
|
||||
}
|
||||
catch (Exception ex) { ErrorMessage = ex.Message; }
|
||||
isrunning = false;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
~HttpServer()
|
||||
{
|
||||
Exit();
|
||||
}
|
||||
private void Run()
|
||||
{
|
||||
while (!stopped)
|
||||
{
|
||||
try
|
||||
{
|
||||
var r = listener.BeginGetContext(new AsyncCallback(RequestHandler), listener);
|
||||
r.AsyncWaitHandle.WaitOne();
|
||||
r.AsyncWaitHandle.Close();
|
||||
}
|
||||
catch (ThreadInterruptedException e1) { ErrorMessage = e1.Message; }
|
||||
catch (HttpListenerException e2)
|
||||
{
|
||||
ErrorMessage = e2.Message;
|
||||
}
|
||||
}
|
||||
}
|
||||
private void RequestHandler(IAsyncResult r)
|
||||
{
|
||||
try
|
||||
{
|
||||
_RequestHandler(r);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
ErrorMessage = e.Message;
|
||||
}
|
||||
}
|
||||
private void _RequestHandler(IAsyncResult r)
|
||||
{
|
||||
if (stopped) return;
|
||||
var l = (HttpListener)r.AsyncState;
|
||||
var ctx = l.EndGetContext(r);
|
||||
var req = ctx.Request;
|
||||
var resp = ctx.Response;
|
||||
var html = "";
|
||||
if(req.HttpMethod=="GET")
|
||||
{
|
||||
HttpRequest e = new HttpRequest();
|
||||
e.Url = req.Url;
|
||||
e.UrlReferrer = req.UrlReferrer;
|
||||
OnHandleGETRequest?.Invoke(this,e);
|
||||
resp.StatusCode = (int)e.StatusCode;
|
||||
html = e.ReturnHtml;
|
||||
}
|
||||
else if(req.HttpMethod=="POST")
|
||||
{
|
||||
HttpRequest e = new HttpRequest
|
||||
{
|
||||
Url = req.Url,
|
||||
UrlReferrer = req.UrlReferrer
|
||||
};
|
||||
var sr = new StreamReader(req.InputStream, Encoding.GetEncoding("GB2312"));
|
||||
e.PostData= sr.ReadToEnd();
|
||||
sr.Close();
|
||||
OnHandlePOSTRequest?.Invoke(this, e);
|
||||
resp.StatusCode = (int)e.StatusCode;
|
||||
html = e.ReturnHtml;
|
||||
}
|
||||
var buffer = Encoding.UTF8.GetBytes(html);
|
||||
resp.ContentLength64 = buffer.Length;
|
||||
resp.OutputStream.Write(buffer, 0, buffer.Length);
|
||||
var outs = resp.OutputStream;
|
||||
outs.Close();
|
||||
resp.Close();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class HttpRequest
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public Uri Url { get; internal set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string PostData { get; internal set; } = "";
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public Uri UrlReferrer { get; internal set; }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string ReturnHtml { get; set; } = "";
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public HttpStatusCode StatusCode { get; set; } = HttpStatusCode.OK;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user