Unity UnityWebRequest使用http与web服务器通讯

一、搭建客户端与服务器http通讯

1.在Nodejs中文官网Node.js 中文网 (nodejs.com.cn),下载并安装Nodejs

 2.在项目文件夹下新建WebServer文件夹,打开CMD窗口,在WebServer文件夹路径下安装express

 

 3.在WebServer文件夹中新建main.js文件,在main.js中编写服务端脚本

var express = require("express");
var path=require("path")
var app = express();
app.listen(7777);//监听ip+端口 http://127.0.0.1:7777/
app.use("/", express.static(path.join(process.cwd(), "www_root")));//在WebServer文件夹中新建www_root文件夹

 4.在CMD中运行main.js,打开浏览器,在地址栏中输入http://127.0.0.1:7777/info.txt即可看到info.txt中的信息

 

 二、UnityWebRequest
  1. 构建UnityWebRequest协议请求
  2. 发送请求:SendWebRequest异步
  3. 从客户端传数据到服务端UploadHandler或从服务端下载数据到客户端DownloadHandler

使用下面的脚本方法可以获取到百度的网页信息

注:需要引入using UnityEngine.Networking;命名空间

IEnumerator GetBaiduInfo(){UnityWebRequest req = UnityWebRequest.Get("http://www.baidu.com");yield return req.SendWebRequest();Debug.Log(req.downloadHandler.text);
}

三、发送数据到服务端

 1.修改main.js文件

var express = require("express");
var path=require("path")
var app = express();
app.listen(7777);//监听ip+端口 http://127.0.0.1:7777/
app.use("/", express.static(path.join(process.cwd(), "www_root")));//在WebServer文件夹中新建www_root文件夹app.get("/", function (req, res) {//console.log(req);//打印请求信息console.log(req.query);res.send("Received information!!");
});
修改脚本方法
IEnumerator GetUploadInfo(){UnityWebRequest req = UnityWebRequest.Get("http://127.0.0.1:7777/?name=123&pwd=321");yield return req.SendWebRequest();Debug.Log(req.downloadHandler.text);
}

2.执行main.js,查看客户端和服务端打印的信息

 

 四、从服务器上获取文件信息

1.修改脚本方法

IEnumerator ReadResInfo(){UnityWebRequest req = UnityWebRequest.Get("http://127.0.0.1:7777/info.txt");yield return req.SendWebRequest();Debug.Log(req.downloadHandler.text);
}

2.执行main.js,查看客户端打印的信息

 五、从服务端下载资源

1.在服务端根目录中新建Sounds文件夹,在该文件夹中放了一首音乐

 2.修改脚本方法

IEnumerator DownloadResfiles(){UnityWebRequest req = UnityWebRequest.Get("http://127.0.0.1:7777/Sounds/안화화 - asmr采耳助眠.mp3");yield return req.SendWebRequest();byte[] body = req.downloadHandler.data;Debug.Log(Application.dataPath);//打印项目的Assets路径,该路径只在PC端有效string fileName = Application.dataPath + "/Sounds/안화화 - asmr采耳助眠.mp3";File.WriteAllBytes(fileName, body);//需要引入using System.IO;
}

3.执行main.js,可以看到音乐被下载到了项目的Sounds文件夹中

 六、客户端上传文件到服务端

1.删除服务端中Sounds文件夹中的音乐,从客户端将音乐传到服务端的Sounds文件夹中

修改main.js

var express = require("express");
var path=require("path")
var app = express();
app.listen(7777);//监听ip+端口 http://127.0.0.1:7777/
app.use("/", express.static(path.join(process.cwd(), "www_root")));//在WebServer文件夹中新建www_root文件夹,设置根目录app.get("/", function (req, res) {//console.log(req);//打印请求信息console.log(req.query);res.send("Received information!!");
});var fs = require("fs");
app.put("/UploadFile", function (req, res) {//打开一个文件var fd = fs.openSync("./www_root/Sounds/안화화 - asmr采耳助眠.mp3", "w");req.on("data", function (data) {fs.write(fd, data, 0, data.length, function () { });});req.on("end", function () {res.send("UploadSucess");fs.close(fd, function () { });});
});

2.修改脚本方法

IEnumerator UploadResfiles(){string fileName = Application.dataPath + "/Sounds/안화화 - asmr采耳助眠.mp3";byte[] body = File.ReadAllBytes(fileName);UnityWebRequest req = UnityWebRequest.Put("http://127.0.0.1:7777/UploadFile", body);yield return req.SendWebRequest();Debug.Log(req.downloadHandler.text);
}

3.在CMD中执行main.js,运行客户端,可以看到客户端接收到服务端发来的信息,在服务端的Sounds文件中可以看到音乐被上传了

 

参考:

【Unity】网络进阶实战(四): UnityWebRequest全功能实战详解_哔哩哔哩_bilibili

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

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

相关文章

Pytorch基本使用—参数初始化

深度学习模型参数初始化是指在训练深度神经网络时,对网络的权重和偏置进行初始化的过程。合适的参数初始化可以加速模型的收敛,并提高模型的性能。 ✨ 1 基本介绍 在深度学习中,常用的参数初始化方法有以下几种: 零初始化&#…

哈希结构(详解)

目录 哈希表 哈希表原理 散列函数 哈希冲突和处理的办法 哈希集合 哈希集合的实现 哈希映射 哈希映射的基本操作 哈希映射的实现 哈希表 散列表(Hash table,也叫哈希表),是根据关键码值(Key)而直接进行访问的数据结构 …

1、QT新建工程

本章内容:本章建立一个简单的QT工程,并且对工程目录进行重新管理,再进行windows端打包部署,方便开发 一、建立工程 创建windows UI应用程序工程 到此,工程就已经建立完毕能正常运行了… 二、工程目录重新管…

ES(1)简介和安装

文章目录 简介倒排索引 安装 简介 ES是面向文档型数据库,一条数据在这里就是一个文档。 和关系型数据库大致关系如下: ES7.x中废除掉Type(表)的概念 倒排索引 要知道什么是倒排索引,就要先知道什么是正排索引 idcontent100…

Django 分布式路由

简介: Django中,主路由配置文件(urls.py)可以不处理用户具体路由,主路由的配置文件可以配置成做请求的分发(分布式请求处理,分发到子路由而不是具体的视图函数)。具体的请求可以由各自的应用来处理。 步骤…

(vue)整个页面添加背景视频

(vue)整个页面添加背景视频 App.vue <template><div id"app" :class"[platform]"><video src"./assets/images/top/bg-video-711.mp4" autoplay muted loop class"bg"></video><router-view /></di…

校园网WiFi IPv6免流上网

ipv6的介绍 IPv6是国际协议的最新版本&#xff0c;用它来取代IPv4主要是为了解决IPv4网络地址枯竭的问题&#xff0c;也在其他很多方面对IPv4有所改进&#xff0c;比如网络的速度和安全性。 IPv4是一个32位的地址&#xff0c;随着用户的增加在2011年国家报道说IPv4的网络地址即…

QT开发技巧之嵌入式linux QT的QCombobox显示空白的问题

1.问题 开发平台&#xff1a;imx6ull qt版本&#xff1a;5.12.9 在嵌入式linux上运行的qt&#xff0c;QCombobox显示空白&#xff0c;不能显示其中的文本内容 2.解决办法 选中QCombobox&#xff0c;在属性栏中将foucsPolicy由WheelFocus改成NoFocus就好了

scrapy ---分布式爬虫

导模块 pip install scrapy-redis 原来scrapy的Scheduler维护的是本机的任务队列&#xff08;待爬取的地址&#xff09;本机的去重队列&#xff08;放在集合中&#xff09;---》在本机内存中 如果把scrapy项目&#xff0c;部署到多台机器上&#xff0c;多台机器爬取的内容是重…

Win10电脑开机PIN码怎么取消?

有的用户稀里糊涂的设置了PIN码之后&#xff0c;在开机时发现多了个PIN码&#xff0c;但又不知道电脑PIN码是什么意思&#xff0c;也不清楚开机PIN码怎么取消。您可以通过阅读以下内容&#xff0c;以了解什么是PIN以及如何取消PIN码。 PIN码是一种快捷登录密码方式&#xff0c;…

云计算的学习(六)

六、云计算的发展趋势 1.云计算相关领域介绍 1.1物联网 物联网来源于互联网&#xff0c;是万物互联的结果&#xff0c;是人和物、物和物之间产生通信和交互。 物联网主要技术&#xff1a; RFID技术&#xff08;射频识别技术&#xff09;传感器技术嵌入式系统技术 1.2大数据…

win系统电脑在线打开sketch文件的方法

自Sketch诞生以来&#xff0c;只有Mac版本。Windows计算机如何在线打开Sketch文件&#xff1f; 即时设计已经解决了你遇到的大部分问题&#xff0c;不占用内存也是免费的。 您可以使用此软件直接在线打开Sketch文件&#xff0c;完整预览并导出CSS、SVG、PNG等&#xff0c;还具…

【工具推荐】企业微信、企业飞书接口调用工具

github地址: GitHub - fasnow/idebug: 企业微信、企业飞书接口调用工具。 简介 企业微信、企业飞书接口调用工具。 使用方法 wechat模块 使用use wechat 选择模块。 首先设置corpid和corpsecret&#xff0c;如有需要可以设置代理&#xff0c;之后再执行run命令。 导出通信…

微信小程序设置底部导航栏

微信小程序设置底部导航栏 1、前言2、图标准备3、小程序tabbar设置 1、前言 我们先来看下效果图&#xff1a; 注意&#xff1a; 导航栏数量最多5个&#xff0c;最少两个。 2、图标准备 阿里图标库 http://www.iconfont.cn/collections/show/29 我们进入该网站&#xff0c;选…

在SpringBoot中对RabbitMQ三种使用方式

基于API的方式 1.使用AmqpAdmin定制消息发送组件 Autowiredprivate AmqpAdmin amqpAdmin;Testpublic void amqpAdmin(){//1.定义fanout类型的交换器amqpAdmin.declareExchange(new FanoutExchange("fanout_exchange"));//2.定义两个默认持久化队列,分别处理email和sm…

macOS 怎么安装redis数据库

1 访问redis数据库下载网址 http://download.redis.io/releases/ 访问上述的redis下载的网址&#xff0c;确定你想要的版本 然后下载即可 &#xff08;我选则的是6.2.6&#xff09; 然后下载 下载后 把这个文件解压&#xff0c;放在自己想要放在的位置 2 打开终端 输入对应的…

MyBatis查询数据库(1)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 经过前⾯的学习咱们 Spring 系列的基本操作已经实现的差不多了&#xff0…

论文浅尝 | 少样本学习的语言模型的持续训练

笔记整理&#xff1a;王贵涛&#xff0c;东南大学硕士&#xff0c;研究方向为自然语言处理 链接&#xff1a;https://github.com/UIC-Liu-Lab/CPT 一、动机 克服灾难性遗忘&#xff08;CF&#xff09;是持续学习&#xff08;CL&#xff09;的一个主要目标。目前有许多方法&…

物流企业「营销服」数字化转型,看这篇文章就够了

物流和供应链企业不仅和生产环节紧密相连&#xff0c;还与消费者需求息息相关&#xff0c;通过高度整合和融合运输、仓储、分拨、配送、信息等服务功能&#xff0c;为延伸产业链、提升价值链、构建供应链提供了关键支持。物流企业在推进现代流通体系、促进国内市场强大发展、推…

Linux —— 进程介绍

目录 一&#xff0c;进程介绍 二&#xff0c;进程使用 进程查看 通过系统调用获取进程标识符 通过系统调用创建进程 fork 一&#xff0c;进程介绍 进程是正在执行的程序或命令&#xff0c;每个进程都是一个运行的实体或程序的执行实例&#xff0c;有自己的地址空间&#x…