You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
4.9 KiB
121 lines
4.9 KiB
|
1 year ago
|
using System;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System.Linq;
|
||
|
|
using System.Text;
|
||
|
|
using System.Threading.Tasks;
|
||
|
|
using Newtonsoft.Json;
|
||
|
|
using System.IO;
|
||
|
|
using System.Net;
|
||
|
|
|
||
|
|
|
||
|
|
namespace formula_manage.UserClass
|
||
|
|
{
|
||
|
|
public class HttpSERVER
|
||
|
|
{
|
||
|
|
private static bool isExcute = true;
|
||
|
|
private static HttpListener listener = new HttpListener();
|
||
|
|
public static void Start()
|
||
|
|
{
|
||
|
|
System.Threading.ThreadPool.QueueUserWorkItem(w => Excute());//单独开启一个线程执行监听消息
|
||
|
|
}
|
||
|
|
private static void Excute()
|
||
|
|
{
|
||
|
|
if (HttpListener.IsSupported)
|
||
|
|
{
|
||
|
|
if (!listener.IsListening)
|
||
|
|
{
|
||
|
|
listener.Prefixes.Add("http://127.0.0.1:8888/"); //添加需要监听的url
|
||
|
|
listener.Start(); //开始监听端口,接收客户端请求
|
||
|
|
}
|
||
|
|
while (isExcute)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
//阻塞主函数至接收到一个客户端请求为止 等待请求
|
||
|
|
HttpListenerContext context = listener.GetContext();
|
||
|
|
//解析请求
|
||
|
|
HttpListenerRequest request = context.Request;
|
||
|
|
//构造响应
|
||
|
|
HttpListenerResponse response = context.Response;
|
||
|
|
//http请求方式:get,post等等
|
||
|
|
string httpMethod = request.HttpMethod?.ToLower();
|
||
|
|
string rawUrl = request.RawUrl;//不包括IP和端口
|
||
|
|
var Url = request.Url;//全路径
|
||
|
|
|
||
|
|
if (httpMethod == "get")
|
||
|
|
{
|
||
|
|
//获取查询参数
|
||
|
|
var queryString = request.QueryString;
|
||
|
|
// 请求接口 test/method?id=5
|
||
|
|
//键值对方式 string val = queryString["key"];
|
||
|
|
//string val = queryString["id"];val的值是5
|
||
|
|
}
|
||
|
|
else if (httpMethod == "post")
|
||
|
|
{
|
||
|
|
//请求接口 test/postMethod 格式是json
|
||
|
|
//{
|
||
|
|
// "id":5,
|
||
|
|
// "name":"zs"
|
||
|
|
//}
|
||
|
|
//获取pots请求的请求体,json格式的字符串
|
||
|
|
var reader = new StreamReader(request.InputStream);
|
||
|
|
var questBody = reader.ReadToEnd();
|
||
|
|
if (!string.IsNullOrEmpty(rawUrl))
|
||
|
|
{
|
||
|
|
//这里可以直接用switch这个只是demo
|
||
|
|
if (rawUrl.Equals("/server/uploadgenconnected", StringComparison.OrdinalIgnoreCase))
|
||
|
|
{
|
||
|
|
if (!string.IsNullOrEmpty(questBody))
|
||
|
|
{
|
||
|
|
UploadGenConnectedModel model = JsonConvert.DeserializeObject<UploadGenConnectedModel>(questBody);
|
||
|
|
if (model != null)
|
||
|
|
{
|
||
|
|
// To Do
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
var responseString = string.Empty;
|
||
|
|
// 执行其他业务逻辑
|
||
|
|
//*****************
|
||
|
|
responseString = JsonConvert.SerializeObject(new { code = 1, msg = "发送成功" });
|
||
|
|
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
|
||
|
|
//对客户端输出相应信息.
|
||
|
|
response.ContentLength64 = buffer.Length;
|
||
|
|
//response.StatusCode = 200;
|
||
|
|
//response.ContentType = "text/plain";
|
||
|
|
//发送响应
|
||
|
|
using (System.IO.Stream output = response.OutputStream)
|
||
|
|
{
|
||
|
|
output.Write(buffer, 0, buffer.Length);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
catch (Exception exceotion)
|
||
|
|
{
|
||
|
|
//Logger.Error("处理消息异常", exceotion);
|
||
|
|
string str = exceotion.Message;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
//Logger.Info("系统不支持HttpListener");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static void Stop()
|
||
|
|
{
|
||
|
|
isExcute = false;
|
||
|
|
if (listener.IsListening)
|
||
|
|
listener.Stop();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public class UploadGenConnectedModel
|
||
|
|
{
|
||
|
|
public bool GenConnected { get; set; }
|
||
|
|
}
|
||
|
|
}
|