Unity开发之网络一HTTP服务端实现

在前一篇介绍Http客户端的实现方式:Unity开发网络一HTTP客户端实现,下面介绍服务端 1.使用VS创建Web项目 2.添加Handler.ashx Handler.ashx.cs实现

/// <summary>
/// Summary description for Handler
/// </summary>
public class Handler : IHttpHandler
{
    //常量
    //应用配置信息
    public const string COMMAND\_APP\_INFO = "app_info";
    //服务器地址列表
    public const string COMMAND\_SERVER\_LIST = "server_list";

    #region 属性
    //协议标识
    private string _cmd;
    //应用Id
    private string _appId;
    //设备Id
    private string _deviceId;
    //客户端版本
    private string _appVer;

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

    #endregion

    public void ProcessRequest(HttpContext context)
    {
        if (DNTRequest.IsPost())
        {
            string data = DNTRequest.GetFormString("data");
            if (data.Length == 0) return;

            //解析数据
            Dictionary<string, string> dict = JsonConvert.DeserializeObject<Dictionary<string, string>>(data);
            if (dict.Count == 0) return;
            if (!dict.TryGetValue("cmd", out _cmd)) return;
            if (!dict.TryGetValue("app\_id", out \_appId)) return;
            if (!dict.TryGetValue("device\_id", out \_deviceId)) return;
            if (!dict.TryGetValue("app\_ver", out \_appVer)) return;

            switch (_cmd)
            {
                case COMMAND\_SERVER\_LIST:
                    _serverList();
                    break;
                default:
                    break;
            }
        }
        else
        {
            _write(true, "");
        }
    }

    private void _serverList()
    {
        string jsonString = "{";

        //temp
        if (_appVer == "2.0.250")
        {
            jsonString += "\\"ip\\":\\"192.168.20.131\\",";
            jsonString += "\\"port\\":9020,";
        }
        else
        {
            jsonString += "\\"ip\\":\\"192.168.20.131\\",";
            jsonString += "\\"port\\":9010,";
        }

        jsonString = jsonString.TrimEnd(',');
        jsonString += "}";

        _write(true, jsonString);
    }

    #region 内部函数
    private void _write(bool result, string data)
    {
        string jsonString = "{";
        jsonString += "\\"" + "result" + "\\":\\"" + string.Format("{0}", result) + "\\",";
        jsonString += "\\"" + "time" + "\\":\\"" + string.Format("{0}", DateTime.Now.Millisecond) + "\\",";
        jsonString += "\\"" + "data" + "\\":" + data + ",";
        jsonString = jsonString.TrimEnd(',');
        jsonString += "}";

        HttpContext.Current.Response.ContentType = "text/json";
        HttpContext.Current.Response.Cache.SetNoStore();
        HttpContext.Current.Response.Write(jsonString);
        HttpContext.Current.Response.End();
    }
    #endregion
}

说明:

1.ProcessRequest接收到客户端请求;

2.处理请求分POST和其他方式,暂时只处理POST;

3.读取数据使用DNTRequest.GetFormString(“data”) 从Form中读取;

4.客户端的ContentType 必须设置为”application/x-www-form-urlencoded”才能读取到,否则需要读取输入流;

5.返回的数据用Json格式。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 xue_huashan@163.com

文章标题:Unity开发之网络一HTTP服务端实现

文章字数:486

本文作者:max-xue

发布时间:2018-06-22, 21:10:01

最后更新:2019-11-09, 21:55:58

原始链接:http://blog.le-more.com/2018/06/22/u3d/e6-9c-8d-e5-8a-a1-e7-ab/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏