• 在Unity快速搭建一个接收http请求


    感谢https://www.cnblogs.com/ggll611928/p/15726839.html

    1. using Unity.Plastic.Newtonsoft.Json.Linq;
    2. using Unity.Plastic.Newtonsoft.Json;
    3. using System;
    4. using System.Collections.Generic;
    5. using System.IO;
    6. using System.Linq;
    7. using System.Net;
    8. using System.Text;
    9. using System.Threading.Tasks;
    10. using UnityEngine;
    11. namespace WFHttpServer
    12. {
    13. /// <summary>
    14. /// 通过HttpListener实现简单的http服务器
    15. /// </summary>
    16. public class HttpListenerServer
    17. {
    18. /// <summary>
    19. /// 启动监听
    20. /// </summary>
    21. /// <param name="prefixes">监听的多个地址</param>
    22. public void Start(HttpListener _listener, string prefixes)
    23. {
    24. // 增加监听的前缀
    25. _listener.Prefixes.Add(prefixes);
    26. _listener.Start(); //开始监听
    27. _listener.BeginGetContext(GetContextCallBack, _listener);
    28. }
    29. private void GetContextCallBack(IAsyncResult ar)
    30. {
    31. try
    32. {
    33. HttpListener _listener = ar.AsyncState as HttpListener;
    34. if (_listener.IsListening)
    35. {
    36. HttpListenerContext context = _listener.EndGetContext(ar);
    37. _listener.BeginGetContext(new AsyncCallback(GetContextCallBack), _listener);
    38. #region 解析Request请求
    39. HttpListenerRequest request = context.Request;
    40. string content = "";
    41. switch (request.HttpMethod)
    42. {
    43. case "POST":
    44. {
    45. Stream stream = context.Request.InputStream;
    46. StreamReader reader = new StreamReader(stream, Encoding.UTF8);
    47. content = reader.ReadToEnd();
    48. Debug.LogError("-------------"+ content);
    49. //模拟接受的数据:将接收的字符串内容进行json反序列号为对象
    50. //TestValue tv = JsonConvert.DeserializeObject<TestValue>(content);
    51. //根据需求做相应操作
    52. }
    53. break;
    54. case "GET":
    55. {
    56. var data = request.QueryString;
    57. Debug.LogError("-------------" + data);
    58. }
    59. break;
    60. }
    61. #endregion
    62. #region 构造Response响应
    63. HttpListenerResponse response = context.Response;
    64. response.StatusCode = (int)HttpStatusCode.OK;
    65. response.ContentType = "application/json;charset=UTF-8";
    66. response.ContentEncoding = Encoding.UTF8;
    67. response.AppendHeader("Content-Type", "application/json;charset=UTF-8");
    68. 模拟返回的数据:Json格式
    69. //var abcOject = new
    70. //{
    71. // code = "200",
    72. // description = "success",
    73. // data = "time=" + DateTime.Now
    74. //};
    75. //string responseString = JsonConvert.SerializeObject(abcOject,
    76. // new JsonSerializerSettings()
    77. // {
    78. // StringEscapeHandling = StringEscapeHandling.EscapeNonAscii
    79. // });
    80. //using (StreamWriter writer = new StreamWriter(response.OutputStream, Encoding.UTF8))
    81. //{
    82. // writer.Write(responseString);
    83. // writer.Close();
    84. // response.Close();
    85. //}
    86. #endregion
    87. }
    88. }
    89. catch (Exception ex)
    90. {
    91. throw new ArgumentException(ex.Message);
    92. }
    93. }
    94. }
    95. //用于json反序列化获取的测试实体类
    96. public class TestValue
    97. {
    98. public int id { get; set; }
    99. public string name { get; set; }
    100. }
    101. }
    1. private void btnStart_Click( )
    2. {
    3. Debug.LogError("--------btnStart_Click----11-----");
    4. //获取监听的多个地址
    5. string ipAddress1 = "http://127.0.0.1:8033/";
    6. // 注意前缀必须以 / 正斜杠结尾
    7. HttpListenerServer httpListenerServer = new HttpListenerServer();
    8. try
    9. {
    10. // 检查系统是否支持
    11. if (!HttpListener.IsSupported)
    12. {
    13. throw new ArgumentException("使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
    14. }
    15. else
    16. {
    17. //启动监听 // 创建监听器.
    18. _listener = new HttpListener();
    19. httpListenerServer.Start(_listener, ipAddress1);
    20. }
    21. }
    22. catch (Exception ex)
    23. {
    24. }
    25. }

  • 相关阅读:
    8 个针对高级职位的高级 JavaScript 面试问题(译文)
    《前端框架开发技术》HTML+CSS+JavaScript 制作个人简历模板
    Java Matcher.lookingAt()方法具有什么功能呢?
    Java集合collection map stream流
    新品速看丨创新微MinewSemi正式推出GNSS高精度卫星定位导航模块
    Vue.js+SpringBoot开发大病保险管理系统
    【BM2 链表内指定区间反转】
    Tensorrt自定义Plugin的调用顺序
    【795. 区间子数组个数】
    Sqlalchemy异步操作不完全指北
  • 原文地址:https://blog.csdn.net/didiaodezhu/article/details/133928981