Unity的http通信--unity与python的django通信
http://blog.csdn.net/chenggong2dm/article/details/17372203
写在前面:
WWW类,是unity里,简单的访问网页的类。本文介绍的就是这种方式,与web服务器之间进行通信。当然,HTTP通信,也可以自己通过socket去写,自己实现一个http通信。
WWW类可以用来发送GET和POST请求到服务器,WWW类默认使用GET方法,并且如果提供一个postData参数可用POST方法。这里我们主要使用实用性更强一些的POST方式。
WWW的完整构造函数如下:
WWW( url:string, postData:byte[], headers:Hashtable )
- urlThe url to download.
- postDataA byte array of data to be posted to the url.
- headersA hash table of custom headers to send with the request.
■注意:这个构造函数,有函数重载,可以省略第三个headers参数,也就是:
WWW( url:string, postData:byte[] )
实际例子:
1,新建一个空项目。【File】-->【New Project】
2,新建一个2D背景,用于衬托UI。【GameObject】-->【CreateOther】-->【GUI Texture】
3,写HttpTest.cs脚本文件,绑定到摄像机上。代码如下:
- using UnityEngine;
- using System.Collections;
- public class HttpTest : MonoBehaviour {
- //variables
- public string str_uid = "";
- public string str_score = "";
- public string str_response = "";
- // Use this for initialization
- void Start () {
- }
- // Update is called once per frame
- void Update () {
- }
- //在C#中, 需要用到yield的话, 必须建立在IEnumerator类中执行
- IEnumerator TestPost()
- {
- //WWW的三个参数: url, postData, headers
- string url = "http://127.0.0.1/test/";
- byte[] post_data;
- Hashtable headers; //System.Collections.Hashtable
- string str_params;
- str_params = "uid=" + str_uid + "&" + "score=" + str_score;
- post_data = System.Text.UTF8Encoding.UTF8.GetBytes(str_params);
- //Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
- //byte[] post_data = encode.GetBytes("uid=中文&score=100");
- headers = new Hashtable();
- //headers.Add("Content-Type","application/x-www-form-urlencoded");
- headers.Add("CONTENT_TYPE", "text/plain");
- //发送请求
- WWW www_instance = new WWW(url, post_data, headers);
- //web服务器返回
- yield return www_instance;
- if (www_instance.error != null)
- {
- Debug.Log(www_instance.error);
- }
- else
- {
- this.str_response = www_instance.text;
- }
- }
- void OnGUI () {
- GUI.Label(new Rect(10,20,60,20),"UID: ");
- GUI.Label(new Rect(10,45,60,20),"Score: ");
- //注意:因为每一帧都在刷, 所以[文本框]是这种写法:
- str_uid = GUI.TextField(new Rect(60, 20, 160, 20), str_uid);
- str_score = GUI.TextField(new Rect(60, 45, 160, 20), str_score);
- //发送Http的POST请求
- if (GUI.Button(new Rect(120,80,100,25),"发送请求"))
- {
- StartCoroutine(TestPost());
- }
- this.str_response = GUI.TextArea(new Rect(10, 150, 210, 100), this.str_response);
- }
- }
4,运行。效果如下:
5,点击,发送POST请求,并显示服务器返回的结果:
附注A:
下面是对应的web服务器端代码:
本例的web服务器,使用的是python的django,使用方法可以参加我上一篇文章:【新版django1.6的Hello world】
views代码如下:
- #! /usr/bin/env python
- #coding=utf-8
- from django.http import HttpResponse
- def test_post(request):
- fanhui = u'服务器返回:\n' + u'用户UI:'+ unicode(request.POST['uid']) +'\n'
- fanhui = fanhui + u'分数:'+ unicode(request.POST['score'])
- return HttpResponse(fanhui)
附注B:
如果使用django,注意要把中间件里的:
'django.middleware.csrf.CsrfViewMiddleware', 注释掉。否则请求会因为CSRF机制,给拦下,报403错误。
或者干脆禁用中间件,也行。
Unity的http通信--unity与python的django通信的更多相关文章
- [Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)
[Unity][Heap sort]用Unity动态演示堆排序的过程 How Heap Sort Works 最近做了一个用Unity3D动态演示堆排序过程的程序. I've made this ap ...
- Unity编程标准导引-Unity中的基本概念-2.1界面概览
Unity中的基本概念 本文我们介绍Unity中的基本概念,包括:场景.游戏对象.组件.预制件.资源等. 2.1.界面概览 打开Unity之后,我们大概可以看到以上画面,以上画面中即显示了我们最常用到 ...
- Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作
刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息 使用的Unity ...
- unity中调试模型时unity崩溃问题
这个问题是在我调试3D模型资源时出现的,每当在Scene场景中调试模型时unity崩溃,出现Unity Bug Reporter页面,反复出现这个问题,很烧脑 对于这个问题我表示很无语,但是经过不断查 ...
- [IoC容器Unity]第一回:Unity预览
1.引言 高内聚,低耦合成为一个OO架构设计的一个参考标准.高内聚是一个模块或者一个类中成员跟这个模块或者类的关系尽量高,低耦合是不同模块或者不同类之间关系尽量简单. 拿咱国家举例来说,假如你是中国人 ...
- C#开发Unity游戏教程之Unity中方法的参数
C#开发Unity游戏教程之Unity中方法的参数 Unity的方法的参数 出现在脚本中的方法,无论是在定义的时候,还是使用的时候,后面都跟着一对括号“( )”,有意义吗?看起来最多也就是起个快速识别 ...
- Python设计模式 - UML - 通信图(Communication Diagram)
简介 通信图表示对象之间的消息往来,是表述时序图中信息交互的另一种UML图,介绍完时序图就要对照学习一下通信图,二者是一体两面的. 通信图和时序图可以相互转换,二者的侧重点不同,通信图侧重哪些对象发送 ...
- [Python] 利用Django进行Web开发系列(一)
1 写在前面 在没有接触互联网这个行业的时候,我就一直很好奇网站是怎么构建的.现在虽然从事互联网相关的工作,但是也一直没有接触过Web开发之类的东西,但是兴趣终归还是要有的,而且是需要自己动手去实践的 ...
- [Python] 利用Django进行Web开发系列(二)
1 编写第一个静态页面——Hello world页面 在上一篇博客<[Python] 利用Django进行Web开发系列(一)>中,我们创建了自己的目录mysite. Step1:创建视图 ...
随机推荐
- 解决Android Studio下Element layer-list must be declared问题
近期将一个项目从Eclipse转到Android Studio. 项目中使用了环信demo中的一些xml资源,转换后发现color资源目录下诸如layer-list或者shape等标签报Element ...
- 开源安卓Android流媒体音视频播放器实现声音自动停止、恢复、一键静音功能源码
本文转自EasyDarwin团队John的博客:http://blog.csdn.net/jyt0551/article/details/60802145 我们在开发安卓Android流媒体音视频播放 ...
- EasyIPCamera通过RTSP协议接入海康、大华等摄像机,摒弃私有SDK接入弊端
本文转自博客:http://blog.csdn.net/xinlanbobo/article/details/53156742 近期工作中需要开发一套视频监控系统,实现WEB端.手机APP端预览局域网 ...
- wprintf、wcout无法输出中文的解决方案
在C语言中,若wprintf无法输出中文,调用函数setlocale(int category, const char *locale)设置locale即可输出中文 此方法也可用于C++中 例: #i ...
- vue2.x源码理解
也不知道哪股风潮,钻研源码竟成了深入理解的标配.我只想说一句,说的很对 准备工作 从GitHub上面下载vue的源码(https://github.com/vuejs/vue) 了解下Flow,Flo ...
- P1604&P1601
[usaco2010]冲浪_slide 受到秘鲁的马丘比丘的新式水上乐园的启发,Farmer John决定也为奶牛们建一个水上乐园.当然,它最大的亮点就是新奇巨大的水上冲浪. 超级轨道包含 E (1 ...
- Jenkins安装部署及tomcat的入门介绍
这里我们使用的方法是用servlet容器来部署jenkins,使用的是tomcat 下载下来tomcat,解压 bin目录下存放的一些启动关闭批处理文件 conf目录下放的一些配置文件,配置虚拟主机之 ...
- Java内存模型(JMM)中的happens-before
happens-before是JMM中最核心的概念,对于Java程序员来说,理解happens-before是理解JMM的关键 . 1.JMM的设计 首先,来看看JMM的设计意图.从JMM的设计者的角 ...
- struts2中<s:if>标签的使用
转载:http://blog.sina.com.cn/s/blog_5f9938640100v2kr.html A:<s:if>判断字符串的问题: 1.判断单个字符:<s:if te ...
- html5--5-6 绘制圆/弧
html5--5-6 绘制圆/弧 学习要点 掌握arc() 方法创建圆弧/曲线(用于创建圆或部分圆) 矩形的绘制方法 rect(x,y,w,h)创建一个矩形 strokeRect(x,y,w,hx,y ...