C# 通过unity中的套接字传输纹理2D
我正在尝试使用套接字在unity中传输纹理2D。 我面临一些序列化问题 下面是我用来序列化texture2D的方法:C# 通过unity中的套接字传输纹理2D,c#,sockets,serialization,unity3d,network-programming,C#,Sockets,Serialization,Unity3d,Network Programming,我正在尝试使用套接字在unity中传输纹理2D。 我面临一些序列化问题 下面是我用来序列化texture2D的方法: Texture2D tex = new Texture2D(5, 5); bool loaded = tex.LoadImage(File.ReadAllBytes(Environment.CurrentDirectory + "/Assets/Textures/IMG_3122.jpg")); tex.Apply(); byte[] bytes =
Texture2D tex = new Texture2D(5, 5);
bool loaded = tex.LoadImage(File.ReadAllBytes(Environment.CurrentDirectory + "/Assets/Textures/IMG_3122.jpg"));
tex.Apply();
byte[] bytes = tex.EncodeToPNG();
NetworkWriter writer = new NetworkWriter();
writer.WriteBytesFull(bytes);
byte[] data = writer.AsArray();
byte error;
byte[] buffer = new byte[1024];
int bufferSize = 1024;
Stream stream = new MemoryStream();
stream.Write(data, 0, 1024);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, data);
Debug.Log("Send byte : " + connectionId);
NetworkTransport.Send(socketId, connectionId, myReliableChannelId, buffer, bufferSize, out error);
对于接收器端,以下是代码:
switch (recNetworkEvent)
{
case NetworkEventType.Nothing:
break;
case NetworkEventType.ConnectEvent:
Debug.Log("New Connection event received");
break;
case NetworkEventType.DataEvent:
Stream stream = new MemoryStream();
stream.Read(recBuffer, 0, bufferSize);
//deserialize
BinaryFormatter formatter = new BinaryFormatter();
string receivedImgBase64 = formatter.Deserialize(stream) as string;
//convert received base64 string to bytearray for texture display
byte[] imgByteArray = Encoding.ASCII.GetBytes(receivedImgBase64);
}
因此,当我试图在接收方读取recBuffer
时,流为空
错误:
SerializationException:serializationStream支持查找,但其长度为0
这是序列化过程中的错误还是其他错误?从流中读取字节并将它们放入recBuffer
。但是您刚刚分配了流,所以它是空的-没有什么可读的
您可能想使用:
从流中读取字节并将它们放入recBuffer
。但是您刚刚分配了流,所以它是空的-没有什么可读的
您可能想使用:
Stream stream = new MemoryStream(recBuffer, 0, bufferSize);