0
사용자가 이미지를 만든 다음 해당 이미지를 서버로 전송하여 이미지를 가져올 수있는 개발중인 컬러링 북 유형 응용 프로그램의 프로토 타입을 프로토 타입 화하려고합니다. 그것을 인스턴스화 된 메쉬 주위에 랩핑합니다. 이 반복의 초기 문제는 버퍼 크기입니다. 오류가 발생합니다 :NetworkWriter WriteBytes : 버퍼가 너무 크다
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()
어떻게 버퍼 크기를 늘리시겠습니까? 내 이미지는 1.5-2mb 범위입니다. 다음과 같이 내 코드는 지금까지 있습니다 :
public class MyMsgType
{
public static short texture = MsgType.Highest + 1;
}
public class TextureMessage : MessageBase
{
public byte[] textureBytes;
public string message; //Optional
}
서버 측 코드 :
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);
}
}
클라이언트 측 코드 : 당신은 NetworkManager.connectionConfig 설정을 통해 사용자 정의 설정을 설정해야합니다
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");
}
}
실제로 메시지를 보낼 때 사용할 채널 유형은 어디에 있습니까? – greyBow
connectionConfig는 읽기 전용 속성입니다. 이 순간에 작동하지 않는 것 같습니다. – greyBow
@greyBow 설명서에 읽기 전용이라고되어 있지 않습니다. 나는 그것을 사용한 적이 없기 때문에 내가 가지고있는 것은 문서이다. – Draco18s