Unity用WebRequest方法,没什么问题:
// An highlighted block
UnityWebRequest req = UnityWebRequest.Get(path);
yield return req.SendWebRequest();
服务器这边开启监听线程时,我们声明一个Stream用来回答客户端
// An highlighted block
Stream clientStream;
clientStream = socket.GetStream();
若是想传文件给客户端,可以用该方法:
// An highlighted block
string filePath = "C:/Users/Administrator/Desktop/XXX";
FileStream fs2 = new FileStream(filePath, FileMode.OpenOrCreate,FileAccess.Read);
byte[] theFileByteArr = File.ReadAllBytes(filePath);
重点来了!!!如果你把这组byte直接发给客户端,Unity收到的数组长度会少1个,很坑。正确的做法是在这组数据前面加一个空行转换成的byte数组,然后再把这组数据放入Stream中,具体代码如下:
// An highlighted block
Encoding encoding=Encoding.UTF8;
byte[] lineBytes = encoding.GetBytes(System.Environment.NewLine);
p.clientStream.Write(lineBytes, 0, lineBytes.Length);
p.clientStream.Write(theFileByteArr, 0, theFileByteArr.Length);
接下来,我们在unity里的webRequest的downloadHandler里面的数据,便和服务器传来的数据一样啦。
// An highlighted block
var file = req.downloadHandler.data;