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.mfbz.cn/a/38646.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity游戏源码分享-迷你高尔夫球游戏MiniGolfConstructionKitv1.1

Unity游戏源码分享-迷你高尔夫球游戏MiniGolfConstructionKitv1.1 有多个游戏关卡 工程地址:https://download.csdn.net/download/Highning0007/88052881

安全中级11:sql注入+联合、报错、时间盲注+sqlmap使用

目录 一、sql注入原理 二、联合SQL注入的方法 1.总体的思路 (1)先进行闭合,进行报错 (2)进行逃逸 (3)外带数据 (4)获取库名 表名 列名 数据 (5&#…

自动驾驶商用驶入“快车道”,汽车软件厂商如何“抢市”?

L3级及以上自动驾驶的商业化进程正在驶入“快车道”。 一方面,高阶自动驾驶的相关法规及标准不断出台,为自动驾驶行业的发展注入了“强心剂”。 比如工业和信息化部副部长辛国斌就曾表示,将启动智能网联汽车准入和上路通行试点,…

freemarker模板在客服域的使用场景及用法介绍

🍊 Java学习:社区快速通道 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年7月15日 🍊 点…

垃圾收集器CMS-JVM(十一)

Jvm类的创建过程包括类的加载,类的验证,准备,分析,初始化。 验证是不是.class文件。 准备过程则是先赋值初始化的值,并不是直接赋值原始值。 分析比较复杂,会有静态链接处理和动态链接处理。 最后就是类…

uni-app:scroll-view滚动盒子,实现横(纵)向滚动条

参照&#xff1a;scroll-view | uni-app官网 (dcloud.net.cn) 样式&#xff1a; 代码&#xff1a; <template><view class"box"><scroll-view scroll-x"true" class"scroll"><view class"box1"> <view c…

使用Vue + FormData + axios实现图片上传功能实战

前言 上节回顾 上一小节中,我们添加了Vue-router的路有数据,这些数据都将是后续实战课程中的真实路由数据了。同时引入了ElementUI的el-menu做为左侧菜单的组件,但本专栏的特点就是遇到第三方功能和组件,自己尽量也要实现一遍,所以,在文章末尾又自己实现了一个tg-menu的…

Docker 安装 Nginx,并实现负载均衡

1、获取 nginx 的镜像 # 默认是latest版本docker pull nginx 2、运行 nginx 容器 docker run --name nginx-80 -p 80:80 --rm -d nginx# --name nginx-80 设定容器的名称# -p 80:80 端口进行映射&#xff0c;将本地的80端口映射到容器内部的80端口# --rm 表示容器退出后直接…

gogs的自定义配置

在 GOGS 下载并安装后&#xff0c;在程序目录下建立一个custom/conf/app.ini的配置文件&#xff0c;内容如下&#xff1a; APP_NAME Gogs # APP名字 RUN_USER git # 启动用户&#xff0c;设置后只能以此账号启动gogs RUN_MODE prod[database] DB_TYPE mysql HOST 1…

热门二叉树面试题

606. 根据二叉树创建字符串 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&a…

SpringCloud整合Sentinel

文章目录 1、Sentinel介绍2、安装Sentinel控制台3、微服务整合Sentinel 1、Sentinel介绍 阿里开源的流量控制组件官网&#xff1a;https://sentinelguard.io/zh-cn/index.html承接了阿里双十一大促流量的核心场景&#xff0c;如秒杀、消息削峰填谷、集群流量控制、实时熔断下游…

vue+relation-graph绘制关系图实用组件

先在终端执行命令 vue create relationgraph创建一个vue2的项目 然后在编辑器中打开新创建的项目 在终端中执行命令 npm install relation-graph --save引入依赖 这样 我们relation-graph就进来了 然后 我们在需要使用的组件中编写代码如下 <template><div>&…

MyBatis 系列2 -- 增加、删除、修改操作

1. 前言 上一系列介绍了MyBatis的背景,以及为什么我们使用MyBatis进行操作数据库,还实现了使用MyBatis进行查询数据库的,接下来我们继续将使用MyBatis操作数据库的其他三种基本操作进行总结. 目录 1. 前言 2. 增加用户操作 3. 修改用户操作 4. 删除用户操作 5. 多表查询操…

3. CSS-定位

absolute和relative依据什么定位? relative依据自身定位,absolute 依据最近一层的定位元素定位 (定位元素是指开启了absolute relative fixed的父元素,没有就是根元素body) 居中对齐的实现方式:详情看这篇博客

webpack-theme-color-replacer+elementui自定义配置主题色

webpack-theme-color-replacer原理是通过获取到配置数组里的颜色值&#xff0c;在触发换色方法时&#xff0c;elementui使用的颜色值存在与配置表中颜色一致的颜色&#xff0c;则改颜色会被替换成新的颜色值。 若是自定义的css文件&#xff0c;需要配置css文件路径 若是需要修…

如何应对黑产进行验证图片资源遍历

第一期&#xff0c;我们分享的攻防点是&#xff1a;验证图片资源遍历。 “遍历”指黑产通过穷举法获得所有验证码图片的答案&#xff0c;以便能在未来彻底无视验证码。由于验证码主要是通过图片语义答案来识别人机&#xff0c;因此攻破这层防御最有效的方式就是遍历该验证码图…

【数据结构】二叉树的前中后序遍历(C语言)

文章目录 什么是二叉树树相关的概念树的表示形式特殊的二叉树如何创造出一棵二叉树二叉树的遍历先序遍历(前序遍历)中序遍历后序遍历 总结 什么是二叉树 [二叉树] 顾名思义就是有两个分支节点的树&#xff0c;不仅如此&#xff0c;除了叶子外的所有节点都具有两个分支节点&…

matlab入门

命名规则&#xff1a; clc&#xff1a;清除命令行的所有命令 clear all&#xff1a;清除所有工作区的内容 注释&#xff1a;两个% 空格 %% matlab的数据类型 1、数字 3 3 * 5 3 / 5 3 5 3 - 52、字符与字符串 s a %% 求s的ascill码 abs(s) char(97) num2str(65) str I…

curl: (56) Recv failure : Connection reset by peer

文章目录 背景原因可能如下1. 服务器端关闭了连接2. 网络问题3. 防火墙或代理问题4. 服务器负载过高 解决办法 背景 docker容器里有http服务&#xff0c;今天在docker容器重启时&#xff0c;去调用http接口&#xff0c;出现了以下错误&#xff1a; curl: (56) Recv failure :…

记一次ruoyi中使用Quartz实现定时任务

一、首先了解一下Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目&#xff0c;它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个&#xff0c;百个&#xff0c;甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标…
最新文章