Unity3d C# HttpWebRequest 异步下载文件
来源:互联网 发布:重庆国际物流数据 编辑:程序博客网 时间:2024/06/06 00:27
最近一直在把公司游戏迁移到支持ARM64,中间出现了很多BUG或者Unity目前不支持操作的问题,这两天遇到异步HttpWebRequest不支持的问题,因为之前一直没有接触,所以也趁机学习了下相关使用。
下面通过一个例子,来使用HttpWebRequest异步下载一个ZIP文件。
using UnityEngine;using System.Collections;using System.Net;using System.IO;using System;using System.Threading;using System.Text;public class RequestState{ const int m_buffetSize = 1024; public StringBuilder m_requestData; public byte[] m_bufferRead; public HttpWebRequest m_request; public HttpWebResponse m_response; public Stream m_streamResponse; public RequestState() { m_bufferRead = new byte[m_buffetSize]; m_requestData = new StringBuilder(""); m_request = null; m_streamResponse = null; }}public class NewBehaviourScript : MonoBehaviour { FileStream fileStream=null;// Use this for initializationvoid Start () { fileStream = new FileStream("disunity_v0.3.4.zip", FileMode.Create); DownloadMusicAsyn();} void DownloadMusicAsyn() { Debug.Log("DownloadMusicAsyn Thread Start"); try { HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create("http://dev.thisisgame.com.cn/disunity_v0.3.4.zip"); RequestState myRequestState = new RequestState(); myRequestState.m_request = myHttpWebRequest; Debug.Log("BeginGetResponse Start"); //异步获取; IAsyncResult result = (IAsyncResult)myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback), myRequestState); Debug.Log("BeginGetResponse End"); } catch (System.Exception ex) { Debug.LogError(ex.ToString()); } } void RespCallback(IAsyncResult result) { Debug.Log("RespCallback 0"); try { RequestState myRequestState = (RequestState)result.AsyncState; HttpWebRequest myHttpWebRequest = myRequestState.m_request; Debug.Log("RespCallback EndGetResponse"); myRequestState.m_response = (HttpWebResponse)myHttpWebRequest.EndGetResponse(result); Stream responseStream = myRequestState.m_response.GetResponseStream(); myRequestState.m_streamResponse = responseStream; //开始读取数据; IAsyncResult asyncreadresult = responseStream.BeginRead(myRequestState.m_bufferRead, 0, 1024, new AsyncCallback(ReadCallBack), myRequestState); return; } catch (System.Exception ex) { Debug.LogError(ex.ToString()); } } void ReadCallBack(IAsyncResult result) { Debug.Log("ReadCallBack"); try { RequestState myRequestState = (RequestState)result.AsyncState; Stream responseStream = myRequestState.m_streamResponse; int read = responseStream.EndRead(result); Debug.Log("read size =" + read); if (read > 0) { //将接收的数据写入; fileStream.Write(myRequestState.m_bufferRead, 0, 1024); fileStream.Flush(); //fileStream.Close(); //继续读取数据; myRequestState.m_bufferRead = new byte[1024]; IAsyncResult asyncreadresult = responseStream.BeginRead(myRequestState.m_bufferRead, 0, 1024, new AsyncCallback(ReadCallBack), myRequestState); } } catch (System.Exception ex) { Debug.LogError(ex.ToString()); } } void TimeoutCallback(object state, bool timeout) { if (timeout) { HttpWebRequest request = state as HttpWebRequest; if (request!=null) { request.Abort(); } } }// Update is called once per framevoid Update () {}}
0 0
- Unity3d C# HttpWebRequest 异步下载文件
- C# HttpWebRequest 异步请求
- C# 异步下载文件
- C#异步下载文件
- C# HttpWebRequest人异步访问
- HttpWebRequest下载文件带进度条
- 使用HttpWebRequest远程下载文件
- Unity3d C# Socket 下载文件 (同步向)
- c#使用HttpWebRequest上传文件
- C# 文件下载(二)异步
- C#中网页文件下载——HttpWebRequest与HttpWebResponse的使用方法
- C#中网页文件下载——HttpWebRequest与HttpWebResponse的使用方法
- HttpWebRequest实现文件下载(断点续传)
- HttpWebRequest 下载任意类型的文件
- .Net 使用HttpWebRequest 和 HttpWebResponse 下载文件
- 使用 HttpWebRequest 下载任意类型的文件
- httpwebrequest下载文件失败的解决方案
- c#异步下载
- 学习博客
- 《C/C++学习指南(语法篇)》 - 关于本书
- Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法
- QT连接Sqlite数据库,中文路径出错
- 位运算求两个整数的平均值
- Unity3d C# HttpWebRequest 异步下载文件
- 大数相加的C++简单实现
- jQuery的实现原理
- Java值传递和引用传递
- SAP增加BOM后,下订单ZCB0打印出错,请大侠帮忙解答,谢谢!
- Android实战技巧:如何在ListView中嵌套ListView
- c++中“引用”
- fork()函数详解
- Eclipse操作小技巧 , 快捷键