Unity程序向Web服务器发送数据

Unity程序向Web服务器发送数据

  • 一、介绍
  • 二、HTTP协议
  • 三、新建Unity工程,创建脚本
    • 1.新建Unity工程,创建脚本WebManager.cs,将其指定给场景中的任意游戏体。
    • 2.在WebManager.cs中添加一个m_info属性和OnGUI函数显示UI:
  • 四、GET请求
    • 在WebManager.cs脚本中添加一个IGetData()函数,注意函数的返回类型是
    • 在OnGUI函数中添加代码执行IGetData函数:
    • 接下来,我们要创建一个PHP脚本响应WWW的GET请求。新建PHP工程,在Web服务器根目录创建index.php
    • 测试如下
  • 五、POST请求
    • 在WebManager.cs脚本中添加一个IPostData()函数:
    • 在OnGUI函数中添加代码执行IPostData函数:
    • 修改PHP脚本,添加POST请求的响应:
    • 测试如下:

一、介绍

本文将演示一个简单的实例,从Unity程序向Web服务器发送数据,Web服务器收到数据后向Unity程序再返回数据。不附带HTTP架构设计需要自行动脑设计。

二、HTTP协议

Unity的WWW是基于HTTP协议的网络传输功能,HTTP(hypertext transport protocol)协议即超文本协议,它规定了万维网数据通信的规则,它是客户端、服务器模式,客户端和服务器都必须支持HTTP。HTTP协议的一个重要特点是每次连接只处理一个请求,当服务器处理完客户端的请求即断开连接,节省传输时间。
使用HTTP协议传输数据有多种方式,Unity的WWW主要支持其中的GET和POST方式。GET方式会将请求附加在URL后,POST方式则是通过FORM(表单)的形式提交。GET方式最多只能传输1024个字节,POST方式理论上则没有限制。从安全角度来看POST比GET方式安全性更高,所以在实际使用中更多选择POST方式。
下面,我们先创建一个简单的UI界面,提供两个按钮,分别用于使用GET和POST方式向服务器提交数据。(这里有不会搭建HTTP服务器的可以看我之前的文章Php与Apache环境配置)

三、新建Unity工程,创建脚本

1.新建Unity工程,创建脚本WebManager.cs,将其指定给场景中的任意游戏体。

2.在WebManager.cs中添加一个m_info属性和OnGUI函数显示UI:

string m_info = "Nothing";private void OnGUI(){GUI.BeginGroup(new Rect(Screen.width * 0.5f - 100,Screen.height * 0.5f -100,500,200),"");GUI.Label(new Rect(10,10,400,30),m_info);if (GUI.Button(new Rect (10,50,150,30),"GetData")){}if (GUI.Button(new Rect(10,100,150,30),"Post Data")){}GUI.EndGroup();}

运行程序,在窗口中会出现两个按钮,并显示“Nothing”,如图所示。我们将使用Get Data和Post Data按钮分别通过GET 和 POST方式向Web服务器发送数据,然后服务器返回数据,传递给m_info属性显示在屏幕上。
在这里插入图片描述

四、GET请求

接下来我们使用GET方式向服务器提交数据,包括一个用户名和一个密码,服务器收到后返回一个字符串。

在WebManager.cs脚本中添加一个IGetData()函数,注意函数的返回类型是

IEnumerator IGetData(){WWW www = new WWW("http://47.101.204.7:8088/index.php?username=get&password=123456");yield return www;if (www.error != null){m_info = www.error;yield return null;}m_info = www.text;}

这个函数中,我们首先创建了一个WWW实例,使其向指定的IP地址发送GET请求,跟随在IP地址后面的?用于附加数据,这里我们发送了两个GET数据,一个是username,另一个是password,它们的值分别是get和12345。

WWW实例将在后台运行,yield return www会等待Web服务器的反映。
如果WWW实例的error属性不为空,Web服务器返回的数据则会保存在WWW实例的text属性中。

在OnGUI函数中添加代码执行IGetData函数:

if (GUI.Button(new Rect (10,50,150,30),"GetData")){StartCoroutine(IGetData());}

接下来,我们要创建一个PHP脚本响应WWW的GET请求。新建PHP工程,在Web服务器根目录创建index.php

<?php
if ( isset($_GET['username']) && isset($_GET['password']) )echo 'username is '.$_GET['username'].' and password is '.$_GET['password']; 
elseecho "error!"; 
?>

这是一段PHP代码,isset函数用来判断是否收到相应的GET请求,如果收到了,则使用echo函数输出结果,并将其返回到Unity程序中。(在PHP中,连接两个字符串是使用.而不是+)

测试如下

在Unity中运行程序,按一下Get Data按钮,然后会收到服务器返回的值,结果如下所示:
在这里插入图片描述

五、POST请求

使用POST提交数据的方式与GET类似,但我们将会把字符串转为byte数组。

在WebManager.cs脚本中添加一个IPostData()函数:

IEnumerator IPostData(){Dictionary<string,string> headers = new Dictionary<string, string>();headers.Add("Content_Type","application/x-www-form-urlencoded");string data = "username=post&password=6789";byte[] bs = System.Text.UTF8Encoding.UTF8.GetBytes(data);WWW www = new WWW("http://47.101.204.7:8088/index.php",bs,headers);yield return www;if (www.error != null){m_info = www.error;yield return null;}m_info = www.text;}

与GET不同的是,在保存数据的字符串中,最前面没有?符号,但仍使用&符号连接数据,最后我们将字符串转为一个byte数组。headers在以前版本是一个HashTable现在都改为了Dictionary,它由键、值对应,这里我们用它来保存HTTP包头。

在OnGUI函数中添加代码执行IPostData函数:

if (GUI.Button(new Rect(10,100,150,30),"Post Data")){StartCoroutine(IPostData());}

修改PHP脚本,添加POST请求的响应:

<?php
if ( isset($_GET['username']) && isset($_GET['password']) )echo 'username is '.$_GET['username'].' and password is '.$_GET['password']; 
else if ( isset($_POST['username']) && isset($_POST['password']) )echo 'username is '.$_POST['username'].' and password is '.$_POST['password'];
elseecho "error!"; 
?>

测试如下:

在Unity中运行程序,按一下Post Data按钮,然后会收到服务器返回的数据

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个利用摸鱼时间背单词的软件

大家好&#xff0c;我是 Java陈序员。 最近进入了考试季&#xff0c;各种考试&#xff0c;英语四六级、考研、期末考等。不知道大家的英语四六级成绩怎么样呢&#xff1f; 记得大学时&#xff0c;英语四级都是靠高中学习积累的老本才勉强过关。 而六级则是考了多次&#xff…

20231224解决outcommit_id.xml1 parser error Document is empty的问题

20231224解决outcommit_id.xml1 parser error Document is empty的问题 2023/12/24 18:13 在开发RK3399的Android10的时候&#xff0c;出现&#xff1a;rootrootrootroot-X99-Turbo:~/3TB/Rockchip_Android10.0_SDK_Release$ make installclean PLATFORM_VERSION_CODENAMEREL…

静态HTTP的常见问题和解决方法

大家好&#xff0c;欢迎来到今天的“静态HTTP大讲堂”&#xff01;今天我们要聊聊静态HTTP的常见问题和解决方法。别小看这些问题哦&#xff0c;它们就像是那些顽皮的小妖精&#xff0c;时不时地给你的网站搞点恶作剧。不过别担心&#xff0c;有我在&#xff0c;这些小妖精都得…

推荐一款好用的免费图片转换工具bmp转png工具bmp2png

推荐一款好用的免费图片转换工具bmp转png工具bmp2png 写这个工具是因为要使用传奇的部分素材在COCOS2DX使用&#xff0c;但是COCOS2DX不支持BMP如果直接将BMP转换到PNG的话&#xff0c;网上找到的工具都不支持透明色转换。难道要用PS一个一个抠图吗&#xff1f;要累死所以写了…

HBase 超大表迁移、备份、还原、同步演练手册:全量快照 + 实时同步(Snapshot + Replication)不停机迁移方案

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,京东购书链接:https://item.jd.com/12677623.html,扫描左侧二维…

免 费 搭 建 小程序商城,打造多商家入驻的b2b2c、o2o、直播带货商城

在数字化时代&#xff0c;电商行业正经历着前所未有的变革。鸿鹄云商的saas云平台以其独特的架构和先进的理念&#xff0c;为电商行业带来了全新的商业模式和营销策略。该平台涉及多个平台端&#xff0c;包括平台管理、商家端、买家平台、微服务平台等&#xff0c;涵盖了pc端、…

Python 数据分析 Matplotlib篇 plt.rcParams 字典(第5讲)

Python 数据分析 Matplotlib篇 plt.rcParams字典(第5讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

17.仿简道云公式函数实战-数学函数-ABS

1. ABS函数 ABS 函数可用于返回数字的绝对值 2. 函数用法 ABS(number) 3. 函数示例 如&#xff0c;ABS(-12)和ABS(12)的返回结果均为 12。 4. 代码实战 首先我们在function包下创建math包&#xff0c;在math包下创建AbsFunction类&#xff0c;代码如下&#xff1a; pac…

Python是什么?

Python是一种高级编程语言&#xff0c;具有简单易学、代码可读性强、开发效率高等特点。它采用解释型执行方式&#xff0c;可以跨平台运行&#xff0c;并且拥有丰富的第三方库和框架支持&#xff0c;被广泛应用于Web开发、数据分析、人工智能等领域。 文章目录 一、Python的历…

定位 CPU 高负载 Java 线程

常用命令 # 按照 CPU 使用率排序输出进程信息 ps -eo pid,ppid,%cpu,%mem,cmd --sort-%cpu# 监控对应 pid 进程下的所有线程按照 CPU 排序 top -Hp "$pid" -o %CPU # jstack 输出 JVM 堆栈信息 jstack $pid演示事例 查看高负载 Java 进程获取到对应 pid $ ps -eo …

免费福利马上截止!深圳的户外小伙伴别错过!COSP2024体育展来了

COSP2024户外博览会 展会时间&#xff1a;2024年3月14-16日 展会地址&#xff1a;深圳福田会展中心 户外运动爱好者不可错过&#xff01; COSP2024户外博览会不仅可以逛展 看各种露营装备、户外器材 还有各种沙龙、峰会活动 就在明年开年&#xff0c;阳春三月天&#xf…

【办公技巧】ppt如何加密只能看不能修改?

大家是否想要给PPT文件设置加密&#xff0c;让ppt文件变为只能查看不能修改的状态&#xff1f;今天给大家分享给PPT文件设置带有密码的只读模式&#xff08;修改权限&#xff09;。 方法如下&#xff1a; PPT文件之后&#xff0c;将PPT文件进行另存为操作&#xff0c;但是在选…

【反射1】——Java基础(韩顺平讲解)

一个需求&#xff0c;引出反射 | 完整的反射使用流程&#xff1a; 在不修改源码的情况下&#xff0c;来控制程序&#xff0c;也符合设计模式中的opc原则(开闭原则&#xff1a;不修改源码&#xff0c;扩容功能) 1、创建配置文件&#xff1a;re.properties classfullpathcom.r…

SATA和M.2接口的异同点

SATA和M.2接口是连接存储设备的两种常见接口&#xff0c;它们在物理尺寸、传输速度、线缆和接头以及适用设备类型等方面有着显著的异同点。 物理尺寸 SATA接口通常用于2.5英寸硬盘、3.5英寸硬盘等传统机械硬盘以及SSD&#xff0c;而M.2接口则是一种较为新型的接口标准&#xff…

线下终端门店调研包含哪些内容

品牌渠道一般分为线上和线下&#xff0c;线上的价格、促销信息、店铺优惠机制等都可以通过登录查看&#xff0c;但是线下门店的数据则需要进店巡查&#xff0c;否则无法得到真实的店铺销售数据&#xff0c;当然也有品牌是靠线下的业务团队报备机制获得这些信息&#xff0c;但是…

前端常用的Vscode插件

前端常用的Vscode插件&#x1f516; 文章目录 前端常用的Vscode插件&#x1f516;1. Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code -- Vscode中文插件2. Code Runner -- 快速运⾏调试代码3. Live Server -- 实时重新加载本地开发服务器4. Image prev…

uni-app之HelloWorld实现

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

JAVA版的鸿鹄云商B2B2C:多商家入驻直播商城系统特性解析 商城免 费搭建

鸿鹄云商 b2b2c产品概述 【b2b2c平台】&#xff0c;以传统电商行业为基石&#xff0c;鸿鹄云商支持“商家入驻平台自营”多运营模式&#xff0c;积极打造“全新市场&#xff0c;全新 模式”企业级b2b2c电商平台&#xff0c;致力干助力各行/互联网创业腾飞并获取更多的收益。从消…

006.HCIA 路由

1、设备管理 用户视图 <xxxx> 系统视图 [xxxx] 接口视图 [xxxx-G] 协议视图 a. 视图切换 用户视图 -> 系统视图 系统视图 -> 接口视图 当前视图 -> 上一层视图 当前视图 -> 用户视图 system-view interface g0/0/0 quit Ctrl Z b. 系统视图命令…

人工智能:预测房价模型的构建与应用

摘要&#xff1a; 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是一种模拟人类智能思维的技术。“预测房价”是AI在房地产领域的重要应用之一。本文将介绍如何使用Python构建一个预测房价的人工智能模型&#xff0c;并对其进行说明和应用。 引言 人…