Ich versuche, ein Stück Vernetzung für ein Malbuch Typ Anwendung, die ich entwickle, die Benutzer ein Bild erstellen können und dann das Bild an einen Server senden, der dann das Bild erstellt und wickelt es um ein instanziiertes Netz. Mein anfängliches Problem bei dieser Iteration ist die Puffergröße. Ich erhalte den Fehler:NetworkWriter WriteBytes: Puffer ist zu groß
NetworkWriter WriteBytes: buffer is too large (699064) bytes. The maximum buffer size is 64K bytes.
UnityEngine.Networking.NetworkWriter:WriteBytesFull(Byte[])
TextureMessage:Serialize(NetworkWriter)
UnityEngine.Networking.NetworkServer:SendToAll(Int16, MessageBase)
Server:SendTexture(Texture2D, String) (at Assets/Scripts/Server.cs:32)
Server:SendOnButtonPress() (at Assets/Scripts/Server.cs:19)
UnityEngine.EventSystems.EventSystem:Update()
Wie vergrößere ich die Puffergröße? Meine Bilder werden im Bereich 1,5-2mb liegen. Mein Code so weit ist wie folgt:
public class MyMsgType
{
public static short texture = MsgType.Highest + 1;
}
public class TextureMessage : MessageBase
{
public byte[] textureBytes;
public string message; //Optional
}
Server-Side-Code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class Server : MonoBehaviour {
public Texture2D textureToSend;
string messageToSend = "Test Message";
// Use this for initialization
void Start() {
NetworkManager.singleton.StartHost();
Debug.Log("Server Started.");
}
public void SendOnButtonPress()
{
SendTexture(textureToSend, messageToSend);
}
//Call to send the Texture and a simple string message
public void SendTexture(Texture2D texture, string message)
{
TextureMessage msg = new TextureMessage();
//Convert Texture2D to byte array
msg.textureBytes = texture.GetRawTextureData();
msg.message = message;
NetworkServer.SendToAll(MyMsgType.texture, msg);
}
}
clientseitigen Code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class Client : MonoBehaviour
{
NetworkClient myClient;
// Use this for initialization
void Start() {
NetworkManager.singleton.StartClient();
Debug.Log("Client Started.");
setupClient();
}
// Create a client and connect to the server port
public void setupClient()
{
//Create new client
myClient = new NetworkClient();
//Register to connect event
myClient.RegisterHandler(MsgType.Connect, OnConnected);
//Register to texture receive event
myClient.RegisterHandler(MyMsgType.texture, OnTextureReceive);
//Connect to server
myClient.Connect("127.0.0.1", 4444);
}
//Called when texture is received
public void OnTextureReceive(NetworkMessage netMsg)
{
TextureMessage msg = netMsg.ReadMessage<TextureMessage>();
//Your Received message
string message = msg.message;
Debug.Log("Texture Messsage " + message);
//Your Received Texture2D
Texture2D receivedtexture = new Texture2D(4, 4);
receivedtexture.LoadRawTextureData(msg.textureBytes);
receivedtexture.Apply();
}
public void OnConnected(NetworkMessage netMsg)
{
Debug.Log("Connected to server");
}
}
Wo sage ich welchen Kanaltyp zu verwenden, wenn ich die Nachricht tatsächlich sende? – greyBow
connectionConfig ist eine schreibgeschützte Eigenschaft. das scheint momentan nicht zu funktionieren. – greyBow
@greyBow Die Dokumentation sagt nicht, dass es nur gelesen wird. Ich habe es nie benutzt, also habe ich nur die Dokumentation. – Draco18s