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

news2024/9/28 11:23:03

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']; 
else
      echo "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'];
else
      echo "error!"; 
?>

测试如下:

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

在这里插入图片描述

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

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

相关文章

基于OpenCV的图像颜色与形状识别设计与实现实验指导书

基于OpenCV的图像颜色与形状识别设计与实现实验指导书 一、实验目的&#xff1a; 通过本实验&#xff0c;学生将了解图像颜色与形状的基本概念&#xff0c;并掌握使用OpenCV进行图像颜色与形状识别的方法。具体操作包括图像剪裁、颜色识别、轮廓检测。 二、实验器材&#xff…

深入理解 LockWindowUpdate: 该函数的作用

今天说说被误解的 LockWindowUpdate 。 这是 LockWindowUpdate 系列中的第一篇&#xff0c;我将会讲讲它的作用、用途以及&#xff08;也许最重要的是&#xff09;对它的误用。 LockWindowUpdate 的作用非常简单。 当一个窗口被锁定时&#xff0c;所有试图绘制它或其子窗口的…

太牛叉了!国产 AI 智能体惊艳问世,全面致敬 FastGPT!

太震撼了&#xff01;太厉害了&#xff01;昆仑万维正式发布了「天工 SkyAgents」平台&#xff0c;助力大模型走入千家万户。你听听&#xff0c;这个名字一听就有一种巧夺天工的感觉&#xff0c;技艺那是相当的高超。 这个平台基于昆仑万维「天工大模型」打造&#xff0c;具备…

豪约客牛排直播间圣诞狂欢,创意云倾力打造节日“氛围感”直播间

12月22日&#xff0c;豪约客牛排开启圣诞节直播专场活动&#xff0c;蓝海创意云vLive虚拟直播系统助力豪约客牛排顺利开播&#xff0c;为本地生活类商家呈现一场高品质的沉浸式直播新体验。vLive虚拟直播系统https://live.vsochina.com/cn 创意云助力豪约客牛排 呈现圣诞氛围感…

VR全景展示的功能有哪些?适合用于哪些领域?

现如今&#xff0c;VR全景展示技术已经逐渐融入了我们的日常生活中&#xff0c;可能大部分人都还没有意识到VR全景是如何应用的&#xff0c;但其实VR全景针对多个行业的垂直领域都有一定的落地使用。在互联网高速发展的今天&#xff0c;多媒体所包含的种类也越来越多&#xff0…

MFC 工具栏

目录 工具栏概述 工具栏的使用 添加工具栏资源 创建&#xff0c;加载工具栏 设置工具栏停靠 工具栏概述 CToolBarCtrl-父类CWnd&#xff0c;封装了关于工具栏控件的各种操作。 CToolBar一父类CControlBar&#xff0c;封装了关于工具栏的操作&#xff0c;以及和框架窗口的…

redis哨兵+redis主从复制(在虚拟机centos的docker下)

1.安装docker Docker安装(CentOS)简单使用-CSDN博客 2.redis主从复制 redis主从复制(在虚拟机centos的docker下)-CSDN博客 3.编辑3个redis配置 cd /etc mkdir redis-sentinel cd redis-sentinel/ wget http://download.redis.io/redis-stable/sentinel.confcp sentinel.co…

2024 年全球顶级的 4 款在线 PDF 转换器服务

想要在2024年全球顶级的PDF转换器服务吗&#xff1f;今天就为大家介绍4款优质的服务。 PDF是一种常用的文件格式&#xff0c;广泛应用于办公、学习和日常生活中。为了方便处理和编辑PDF文件&#xff0c;许多在线PDF转换器应运而生&#xff0c;为广大用户提供了便捷的文件转换服…

直线中点算法

中点算法是基于隐函数方程设计的&#xff0c;使用像素网格中点来判断如何选取距离理想直线最近的像素点&#xff0c;直线的中点算法不仅与 Bresenham 算法产生同样的像素点集&#xff0c;二期还可以推广到圆和椭圆。 原理 直线的隐函数表示 F ( x , y ) y − k x − b 0 F(…

强大的Adobe全家桶软件都是干什么用的,你知道吗?

Adobe Creative Suite是Adobe系统公司出品的一个图形设计、影像编辑与网络开发的软件产品套装。该套装的最高版本是Adobe Creative Cloud。 根据受众市场的不同分为Master Collection(大师版)、Production Premium&#xff08;影音高级版&#xff09;Design&Web Premium&a…

JAVA第一季

第二章 变量和常量 Java中的常用关键字 Java标识符 标识符就是用于给 Java 程序中变量、类、方法等命名的符号。 使用标识符时&#xff0c;需要遵守几条规则&#xff1a; 1. 标识符可以由字母、数字、下划线&#xff08;_&#xff09;、美元符&#xff08;$&#xff09;组成…

微信小程序~如何设置页面的背景色

微信小程序~如何设置页面的背景色 众所周知&#xff0c;微信小程序每个页面由.json&#xff0c;.scss&#xff0c;.ts&#xff0c;.wxml这四个文件组成。 有的小伙伴会发现&#xff0c;需要给页面加背景色的时候&#xff0c;只需在此页面的.scss文件中写个page{background-colo…

kali-钓鱼网站远程代码漏洞分析

文章目录 一、靶场搭建二、开始信息收集&#xff0c;寻找漏洞三、使用蚁剑连接后门程序四、使用webshell查看数据库信息五、进入网站后台 实验环境 Kali CentOs 一、靶场搭建 CentOsIP地址192.168.64.159 #关闭centos防火墙 [rootlocalhost ~]# systemctl disable --now fi…

常用两种Linux命令生成器

在Linux中&#xff0c;可以使用多种命令来生成随机密码。以下是其中两种常用的命令&#xff1a; 1.pwgen&#xff1a;这个命令可以生成随机、无意义的但容易发音的密码。生成的密码可以只包含小写字母、大小写混合或数字。大写字母和数字会以一种便于记忆的方式放置&#xff0…

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

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

云计算与大数据之间的羁绊(期末不挂科版):云计算 | 大数据 | Hadoop | HDFS | MapReduce | Hive | Spark

文章目录 前言&#xff1a;一、云计算1.1 云计算的基本思想1.2 云计算概述——什么是云计算&#xff1f;1.3 云计算的基本特征1.4 云计算的部署模式1.5 云服务1.6 云计算的关键技术——虚拟化技术1.6.1 虚拟化的好处1.6.2 虚拟化技术的应用——12306使用阿里云避免了高峰期的崩…

线上服务有哪些稳定性指标?

在分布式高可用设计中&#xff0c;系统监控非常重要&#xff0c;系统监控做好了&#xff0c;可以提前对异常情况进行报警&#xff0c;避免很多线上故障的产生。系统监控做得好不好&#xff0c;也是评价一家互联网公司基础建设水平的重要标准&#xff0c;今天一起来讨论一下&…

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

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

18.仿简道云公式函数实战-数学函数-AVERAGE

1. AVERAGE函数 AVERAGE 函数可用于计算一组数值的算术平均值。 2. 函数用法 AVERAGE(数字1,数字2,...) 3. 函数示例 AVERAGE(1,3,5)&#xff0c;返回结果为 3 4. 代码实战 首先我们在function包下创建math包&#xff0c;在math包下创建AvgFunction类&#xff0c;代码如…

使用静态HTTP进行缓存:提高网站性能的关键

大家好&#xff0c;今天我们来聊聊如何通过使用静态HTTP进行缓存&#xff0c;来提高网站的“奔跑速度”。没错&#xff0c;就像给网站穿上了一双“风火轮”&#xff0c;让它飞得更快&#xff01; 首先&#xff0c;我们来了解一下什么是缓存。简单来说&#xff0c;缓存就是把你…