Unity的弱联网Json数据传输
void Start () {
Thread t = new Thread (Check); // No need to explicitly use ThreadStart
t.Start();
}
static string TestServer = "http://192.168.1.105:8080/cross";
static void Check() {
HttpClients httpClient = new HttpClients();
Dictionary<string, string> data = new Dictionary<string, string>();
if(result==null){
result = new Dictionary<string, string>();
}else{
result.Clear();
}
data.Add("appName","cutit");
data.Add("platform","android");
data.Add("language","chinese");
data.Add("channel","offical");
ResultResponse resultResponse = httpClient.OpenPostUrl(TestServer,null,data);
string resultString = resultResponse.GetContent().ToString();
Dictionary<string, string>m = httpClient.JsonToDict(resultString);
int resultCode = int.Parse(m["resultCode"]);
if(resultCode ==){
string adState = "" + m["adState"];
string isShowLogoText = "" + m["key1"];
Debug.Log("steve:" + adState + ":" + isShowLogoText);
if(adState == "OFF"){
}
if(isShowLogoText == "ON"){
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text;
using UnityEngine;
using System.Text.RegularExpressions; namespace HttpClient
{ /// <summary>
/// 通过Http协议访问Web
/// </summary>
public class HttpClients
{
#region Cookie集合
/// <summary>
/// Cookie集合
/// </summary>
private CookieContainer cookies;
#endregion #region Http user-agent标头值
/// <summary>
/// Http user-agent标头值
/// </summary>
public string UserAgent { get; set; }
#endregion #region HttpClient构造函数
public HttpClients()
{
this.cookies = new CookieContainer();
}
#endregion #region 获取HttpClient的Cookie集合
/// <summary>
/// 获取HttpClient的Cookie集合
/// </summary>
/// <returns></returns>
public CookieContainer GetCookieContainer()
{
return this.cookies;
}
#endregion #region 设置HttpClient的Cookie集合
/// <summary>
/// 设置HttpClient的Cookie集合
/// </summary>
/// <param name="_cookie">Cookie集合对象</param>
/// <returns>True设置成功 False设置失败</returns>
public bool SetCookieContainer(CookieContainer _cookie)
{
if (_cookie != null)
{
this.cookies = _cookie;
return true;
}
return false;
}
#endregion #region 以GET方式打开一个Http连接
/// <summary>
/// 以GET方式打开一个Http连接
/// </summary>
/// <param name="url">地址</param>
/// <param name="headers">请求头</param>
/// <returns></returns>
public ResultResponse OpenGetUrl(string url, Dictionary<string, string> headers)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.CookieContainer = this.cookies;
request.Method = HttpClients.ConnectionType.GET;
request.KeepAlive = true;
if (this.UserAgent != null && this.UserAgent != "")
{
request.UserAgent = this.UserAgent;
}
this.FillHeaders(request, headers);
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
return new ResultResponse(response);
}
#endregion #region 以GET方式打开一个Http连接,302自定义处理行为
/// <summary>
/// 以GET方式打开一个Http连接,302自定义处理行为
/// </summary>
/// <param name="url">地址</param>
/// <param name="headers">请求头</param>
/// <param name="action">302跳转处理</param>
/// <returns></returns>
public ResultResponse OpenGetUrlRedirect(string url, Dictionary<string, string> headers,HttpClients.RedirectAction action)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.CookieContainer = this.cookies;
request.Method = HttpClients.ConnectionType.GET;
request.KeepAlive = true;
request.AllowAutoRedirect = false; //302不采用默认行为处理
if (this.UserAgent != null && this.UserAgent != "")
{
request.UserAgent = this.UserAgent;
}
this.FillHeaders(request, headers);
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
ResultResponse result=new ResultResponse(response);
if (response.StatusCode == HttpStatusCode.Found)
{
bool ret = true;
if (action != null)
{
ret = action(result);
}
string locationurl = response.Headers["Location"];
if (ret == true)
{
return this.OpenGetUrlRedirect(locationurl, null, action);
}
return result;
}
return result;
}
#endregion #region Http 302跳转处理
/// <summary>
/// Http 302跳转处理
/// </summary>
/// <param name="result">响应对象</param>
/// <returns>False 不继续跳转 True继续跳转</returns>
public delegate bool RedirectAction(ResultResponse result);
#endregion #region 将Http标头值添加到Request对象中
/// <summary>
/// 将Http标头值添加到Request对象中
/// </summary>
/// <param name="headers"></param>
private void FillHeaders(HttpWebRequest request,Dictionary<string, string> headers)
{
if (headers != null && headers.Count > )
{
Dictionary<string, string>.Enumerator em = headers.GetEnumerator();
while (em.MoveNext())
{
request.Headers.Add(em.Current.Key, em.Current.Value);
}
}
}
#endregion #region 以POST方式打开一个Http连接
/// <summary>
/// 以POST方式打开一个Http连接
/// </summary>
/// <param name="url">地址</param>
/// <param name="headers">请求头</param>
/// <param name="data">发送的数据</param>
/// <returns></returns>
public ResultResponse OpenPostUrl(string url,Dictionary<string,string> headers,Dictionary<string,string> data)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.CookieContainer = this.cookies;
request.Method = HttpClients.ConnectionType.POST;
request.KeepAlive = true;
if (this.UserAgent != null && this.UserAgent != "")
{
request.UserAgent = this.UserAgent;
}
this.FillHeaders(request, headers);
byte[] buff = DictToBytes(data);
request.GetRequestStream().Write(buff, , buff.Length);
request.GetRequestStream().Close();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
return new ResultResponse(response);
}
#endregion #region 以POST方式打开一个Http连接,302自定义处理行为
/// <summary>
/// 以POST方式打开一个Http连接,302自定义处理行为
/// </summary>
/// <param name="url">地址</param>
/// <param name="headers">请求头</param>
/// <param name="data">发送的数据</param>
/// <param name="action">302自定义处理</param>
/// <returns></returns>
public ResultResponse OpenPostUrlRedirect(string url, Dictionary<string, string> headers, Dictionary<string, string> data,HttpClients.RedirectAction action)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.CookieContainer = this.cookies;
request.Method = HttpClients.ConnectionType.POST;
request.KeepAlive = true;
request.AllowAutoRedirect = false;
if (this.UserAgent != null && this.UserAgent != "")
{
request.UserAgent = this.UserAgent;
}
this.FillHeaders(request, headers);
byte[] buff = DictToBytes(data);
request.GetRequestStream().Write(buff, , buff.Length);
request.GetRequestStream().Close();
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
ResultResponse result = new ResultResponse(response); if (response.StatusCode == HttpStatusCode.Found)
{
bool ret = true;
if (action != null)
{
ret = action(result);
}
string locationurl = response.Headers["Location"];
return result;
}
return result;
}
#endregion #region 将字典的key和value拼接成http参数
/// <summary>
/// 将字典的key和value拼接成http参数
/// </summary>
/// <param name="dic">参数</param>
/// <returns></returns>
private byte[] DictToBytes(Dictionary<string, string> dic)
{
StringBuilder sb = null;
if (dic != null)
{
Dictionary<string,string>.Enumerator em= dic.GetEnumerator();
sb = new StringBuilder();
sb.Append("{");
while (em.MoveNext())
{
sb.Append(String.Format("{0}:{1};", '"'+ em.Current.Key + '"', '"' + em.Current.Value + '"'));
}
sb.Remove (sb.Length-,);
sb.Append("}");
return System.Text.Encoding.UTF8.GetBytes(sb.ToString());
}
return null;
} public Dictionary<string, string> JsonToDict(string json)
{
StringBuilder sb = new StringBuilder(json);
Dictionary<string, string> result = new Dictionary<string, string>();
if (json != null && json != "") {
sb.Remove (, );
sb.Remove (sb.Length - , );
string t = "" + sb;
string[] temp = Regex.Split (t, ",", RegexOptions.IgnoreCase); for (int i = ; i < temp.Length; i++) {
temp[i] = Regex.Replace (temp [i], "\"","", RegexOptions.IgnoreCase);
string[] splits = Regex.Split (temp [i],":", RegexOptions.IgnoreCase);
result.Add (splits [].ToString(), splits [].ToString());
} return result;
} return null;
} #endregion #region HttpClient打开连接的方式
/// <summary>
/// HttpClient打开连接的方式
/// </summary>
public static class ConnectionType
{
public static string GET { get { return "GET"; } }
public static string POST { get { return "POST"; } }
}
#endregion }
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Text; namespace HttpClient
{ /// <summary>
///包含服务器响应数据的对象
/// </summary>
public class ResultResponse
{
#region HttpWebResponse对象
/// <summary>
/// HttpWebResponse对象
/// </summary>
private HttpWebResponse m_response;
#endregion #region 创建一个HttpWebResponse对象
/// <summary>
/// 创建一个HttpWebResponse对象
/// </summary>
/// <param name="_response">HttpWebResponse</param>
public ResultResponse(HttpWebResponse _response)
{
this.m_response = _response;
}
#endregion #region 获取响应内容的二进制流
/// <summary>
/// 获取响应内容的二进制流
/// </summary>
/// <returns></returns>
public Stream GetResponseStream()
{
if (this.m_response != null)
{
return this.m_response.GetResponseStream();
}
return null;
}
#endregion #region Http版本
/// <summary>
/// Http版本
/// </summary>
public string ProtocolVersion { get { return this.m_response != null ? this.m_response.ProtocolVersion.ToString() : ""; } }
#endregion
/// <summary>
/// 响应方法
/// </summary>
public string Method { get { return this.m_response != null ? this.m_response.Method : ""; } }
/// <summary>
/// Http状态码
/// </summary>
public string StatusCode { get { return this.m_response != null ? this.m_response.StatusCode.ToString() : ""; } }
/// <summary>
/// Http响应头
/// </summary>
public WebHeaderCollection Headers { get { return this.m_response != null ? this.m_response.Headers : null;} } /// <summary>
/// 响应流的字符编码
/// </summary>
/// <returns></returns>
public Encoding getResponseEncoding()
{
if (this.m_response != null)
{
return Encoding.GetEncoding(this.m_response.ContentEncoding);
}
return null;
} /// <summary>
/// 获取响应内容的字符串
/// </summary>
/// <param name="encoding">字符串编码(默认utf8)</param>
/// <returns></returns>
public string GetContent(string encoding="utf-8")
{
return System.Text.Encoding.GetEncoding(encoding).GetString(this.StreamtoBytes(this.GetResponseStream())); // return System.Text.Encoding.GetEncoding(encoding).GetString(this.StreamtoBytes(this.GetResponseStream()));
} /// <summary>
/// 获取原始的HttpWebResponse
/// </summary>
/// <returns></returns>
public HttpWebResponse GetRawResponse()
{
return this.m_response;
} /// <summary>
/// 二进制流转换成字节数组
/// </summary>
/// <param name="_stream"></param>
/// <returns></returns>
private byte[] StreamtoBytes(Stream _stream)
{
byte[] buff;
int rlen;
MemoryStream _ms;
if (_stream != null)
{
buff = new byte[];
rlen = ;
_ms = new MemoryStream();
while ((rlen = _stream.Read(buff, , )) > )
{
_ms.Write(buff, , rlen);
}
buff = _ms.ToArray();
_ms.Close();
_ms.Dispose();
return buff;
}
return null;
}
}
}
Unity的弱联网Json数据传输的更多相关文章
- Java游戏服务器成长之路——弱联网游戏篇(源码分析)
前言 前段时间由于公司的一款弱联网游戏急着上线,没能及时分享,现在基本做的差不多,剩下的就是测试阶段了(本来说元旦来分享一下服务器技术的).公司的这款游戏已经上线一年多了,在我来之前一直都是单机版本, ...
- 【Cocos2d-Js基础教学(6)网络层(弱联网)的封装及使用】
谈到联网,在游戏中也是非常核心的模块,在官方Js-test中我们可以找到联网部分 的NetworkTest文件下有两个类 SocketIOTest.js(Socket 类) WebSocketTest ...
- 单机 & 弱联网手游 防破解、金币改动 简单措施
手游经常使用破解方法 对于一个弱联网或者单机游戏,能够从下面方面去破解: 1.找得到存档文件的,直接破解改动存档文件. 2.找不到存档文件,就在游戏执行时借助一些软件来改动数值,比方用各种改动器手游助 ...
- 【Cocos2d-x游戏开发】Cocos2d-x中的弱联网技术
在上一篇博客中,我们一起学习了如何在Cocos2d-x中存储数据和读取信息,本篇博客我们将一起讨论和数据存储同样重要的联网技术. 一.弱联网技术介绍 在网络游戏中许多重要的功能都需要网络连接,而根据需 ...
- 5.QT中关于HTTPClient相关的操作,Json数据传输
新建项目T12HttpClient T12HttpClient.pro SOURCES += \ main.cpp QT += network CONFIG += C++11 main.cpp ...
- Unity判断用户联网状态,WiFi/移动网络/无网络
Unity判断用户联网状态 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- Unity游戏数据用Json保存
(一)关于路径 unity有几个关键的路径 (1).Application.dataPath 只读路径,就是工作目录的Assets路径 (2).Application.streamingAssetsP ...
- unity 通过JsonUtility实现json数据的本地保存和读取
本文主要讲解json数据在本地的保存和读取,使用的是unity5之后提供的JsonUtility工具. 一.关于json数据的保存 在实际开发中,有时候可能涉及到大量数据保存到本地,以便于下次客户端的 ...
- 【一天一个小知识10/20】Unity通过www获取json文本信息。
前提:领导要我在unity获取局域网服务器的文本信息.给了一个json的网络文本让我测试.我对于json以及服务器比较陌生.就直接去网上找相关的资料. 以下是自己测试的代码,没问题. 测试的网络jso ...
随机推荐
- 并发编程-concurrent指南-阻塞双端队列BlockingDeque
java.util.concurrent 包里的 BlockingDeque 接口表示一个线程安放入和提取实例的双端队列. BlockingDeque 类是一个双端队列,在不能够插入元素时,它将阻塞住 ...
- 关于c++中的Debug以及runtime_error之segment_fault
差不多每次编一些竞赛类的程序都会至少给我报一次runtime_error(运行时错误).这或许也是广大OIer心中永远的痛.~_~ 本文主要讨论如何对runtime_error以及其中的segment ...
- SQL系统优化
1 系统优化介绍 在我们的项目中,由于客户的使用时间较长或客户的数据量大,造成系统运行速度慢,系统性能下降就容易造成数据库阻塞.这是个非常痛苦的事情,用户的查询.新增.修改等需要花很多时间,甚至造成系 ...
- Python旅途——函数的递归和栈的使用
Python--函数之递归.栈的使用 今天主要和大家分享函数的递归,同时引入一个新的概念--栈 1.递归 1.定义 函数的递归指的就是函数自己调用自己,什么是函数自己调用自己呢?我们来看一个栗子: 这 ...
- 解决webpack打包速度慢的解决办法
技巧1 webpack在打包的时候第一次总是会做很长的准备工作,包括加载插件之类的.在刚接触webpack的时候总是webpack一下-测一下-改一下-再webpack一下,这种方式最后让很多人崩溃了 ...
- PostgreSQL 窗口函数 ( Window Functions ) 如何使用?
一.为什么要有窗口函数 我们直接用例子来说明,这里有一张学生考试成绩表testScore: 现在有个需求,需要查询的时候多出一列subject_avg_score,为此科目所有人的平均成绩,好跟每个人 ...
- 百度OCR 文字识别 Android安全校验
百度OCR接口使用总结: 之前总结一下关于百度OCR文字识别接口的使用步骤(Android版本 不带包名配置 安全性弱).这边博客主要介绍,百度OCR文字识别接口,官方推荐使用方式,授权文件(安全模式 ...
- Jsoup访问https网址异常SSLHandshakeException(已解决)
爬取网页遇到的目标站点证书不合法问题. 使用jsoup爬取解析网页时,出现了如下的异常情况. javax.net.ssl.SSLHandshakeException: sun.security.val ...
- [leetcode] 120. Triangle (Medium)
原题 思路: dp,从下往上依次取得最小的,取到最上面的,就是一条最小的路径. class Solution { public: int minimumTotal(vector<vector&l ...
- .Net微信网页开发之使用微信JS-SDK自定义微信分享内容
第一步.微信JS-SDK的使用步骤,配置信息的生成获取讲解: 关于JS-SDK的使用步骤和timestamp(时间戳),nonceStr(随机串),signature(签名),access_token ...