感谢https://www.cnblogs.com/ggll611928/p/15726839.html
using Unity.Plastic.Newtonsoft.Json.Linq;
using Unity.Plastic.Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace WFHttpServer
{
/// <summary>
/// 通过HttpListener实现简单的http服务器
/// </summary>
public class HttpListenerServer
{
/// <summary>
/// 启动监听
/// </summary>
/// <param name="prefixes">监听的多个地址</param>
public void Start(HttpListener _listener, string prefixes)
{
// 增加监听的前缀
_listener.Prefixes.Add(prefixes);
_listener.Start(); //开始监听
_listener.BeginGetContext(GetContextCallBack, _listener);
}
private void GetContextCallBack(IAsyncResult ar)
{
try
{
HttpListener _listener = ar.AsyncState as HttpListener;
if (_listener.IsListening)
{
HttpListenerContext context = _listener.EndGetContext(ar);
_listener.BeginGetContext(new AsyncCallback(GetContextCallBack), _listener);
#region 解析Request请求
HttpListenerRequest request = context.Request;
string content = "";
switch (request.HttpMethod)
{
case "POST":
{
Stream stream = context.Request.InputStream;
StreamReader reader = new StreamReader(stream, Encoding.UTF8);
content = reader.ReadToEnd();
Debug.LogError("-------------"+ content);
//模拟接受的数据:将接收的字符串内容进行json反序列号为对象
//TestValue tv = JsonConvert.DeserializeObject<TestValue>(content);
//根据需求做相应操作
}
break;
case "GET":
{
var data = request.QueryString;
Debug.LogError("-------------" + data);
}
break;
}
#endregion
#region 构造Response响应
HttpListenerResponse response = context.Response;
response.StatusCode = (int)HttpStatusCode.OK;
response.ContentType = "application/json;charset=UTF-8";
response.ContentEncoding = Encoding.UTF8;
response.AppendHeader("Content-Type", "application/json;charset=UTF-8");
模拟返回的数据:Json格式
//var abcOject = new
//{
// code = "200",
// description = "success",
// data = "time=" + DateTime.Now
//};
//string responseString = JsonConvert.SerializeObject(abcOject,
// new JsonSerializerSettings()
// {
// StringEscapeHandling = StringEscapeHandling.EscapeNonAscii
// });
//using (StreamWriter writer = new StreamWriter(response.OutputStream, Encoding.UTF8))
//{
// writer.Write(responseString);
// writer.Close();
// response.Close();
//}
#endregion
}
}
catch (Exception ex)
{
throw new ArgumentException(ex.Message);
}
}
}
//用于json反序列化获取的测试实体类
public class TestValue
{
public int id { get; set; }
public string name { get; set; }
}
}
private void btnStart_Click( )
{
Debug.LogError("--------btnStart_Click----11-----");
//获取监听的多个地址
string ipAddress1 = "http://127.0.0.1:8033/";
// 注意前缀必须以 / 正斜杠结尾
HttpListenerServer httpListenerServer = new HttpListenerServer();
try
{
// 检查系统是否支持
if (!HttpListener.IsSupported)
{
throw new ArgumentException("使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
}
else
{
//启动监听 // 创建监听器.
_listener = new HttpListener();
httpListenerServer.Start(_listener, ipAddress1);
}
}
catch (Exception ex)
{
}
}