Unity利用画面传输插件实现局域网数据传输

画面传输插件提供了TCP和UDP传输协议,故此我们可以利用它来实现这个功能

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.Text;


public class NetWorkMgr : MonoBehaviour
{
    private static NetWorkMgr instance;

    public static NetWorkMgr Instance
    {
        get
        {
            if (instance == null)
            {
                GameObject prefab = Resources.Load<GameObject>("ConnectMgr");
                GameObject obj = Instantiate(prefab);
                instance = obj.GetComponent<NetWorkMgr>();
            }

            return instance;
        }
    }


    [SerializeField] private LargeFileEncoder largeFileEncoder;

    [SerializeField] private LargeFileDecoder largeFileDecoder;

    [SerializeField] private string targetIp;


    public Action<string> ReceiveString;

    /// <summary>
    /// 大文件
    /// </summary>
    public Action<byte[]> ReceiveLargeFile;


    public GameObject logUI;

    public string TargetIp
    {
        get
        {
            return targetIp;
        }
        set
        {
            targetIp = value;
        }
    }


    void Awake()
    {
        //instance = this;
        DontDestroyOnLoad(this);

        logUI.SetActive(false);
    }


    void Start()
    {

    }


    void Update()
    {
        if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.T))
        {
            if (logUI)
            {
                logUI.SetActive(!logUI.activeSelf);
            }
        }
    }

    /// <summary>
    /// 初始化服务端
    /// </summary>
    public void InitAsServer()
    {
        FMNetworkManager.instance.Action_InitAsServer();
    }

    /// <summary>
    /// 初始化客户端
    /// </summary>
    public void InitAsClient()
    {
        FMNetworkManager.instance.Action_InitAsClient();
    }



    public void Action_ProcessStringData(string _string)
    {
        if (FMNetworkManager.instance.NetworkType == FMNetworkType.Server)
        {

        }
        else
        {

        }

        ReceiveString?.Invoke(_string);

    }

    public void Action_ProcessByteData(byte[] _byte)
    {
        if (FMNetworkManager.instance.NetworkType == FMNetworkType.Server)
        {

        }
        else
        {

        }

        ReceiveLargeFile?.Invoke(_byte);
    }

    public void Action_ShowRawByteLength(byte[] _byte)
    {

    }



    /// <summary>
    /// 
    /// </summary>
    /// <param name="_value"></param>
    public void Action_SendByteToAll(int _value)
    {
        FMNetworkManager.instance.SendToAll(new byte[_value]);
    }
    public void Action_SendByteToServer(int _value)
    {
        FMNetworkManager.instance.SendToServer(new byte[_value]);
    }
    public void Action_SendByteToOthers(int _value)
    {
        FMNetworkManager.instance.SendToOthers(new byte[_value]);
    }
    public void Action_SendByteToTarget(int _value)
    {
        FMNetworkManager.instance.SendToTarget(new byte[_value], targetIp);
    }



    public void Action_SendTextToAll(string _value)
    {
        FMNetworkManager.instance.SendToAll(_value);
    }
    public void Action_SendTextToServer(string _value)
    {
        FMNetworkManager.instance.SendToServer(_value);
    }
    public void Action_SendTextToOthers(string _value)
    {
        FMNetworkManager.instance.SendToOthers(_value);
    }
    public void Action_SendTextToTarget(string _value)
    {
        FMNetworkManager.instance.SendToTarget(_value, targetIp);
    }


    /// <summary>
    /// 发送大的数据
    /// </summary>
    /// <param name="datas"></param>
    public void Action_SendLargeFile(byte[] datas)
    {
        largeFileEncoder.Action_SendLargeByte(datas);
    }




    public byte[] PackData(int headint, string jsonstr)
    {
        byte[] head = BitConverter.GetBytes(headint);
        byte[] body = Encoding.UTF8.GetBytes(jsonstr);

        byte[] data = new byte[head.Length + body.Length];

        Buffer.BlockCopy(head, 0, data, 0, head.Length);
        Buffer.BlockCopy(body, 0, data, head.Length, body.Length);

        return data;
    }


    /// <summary>
    /// 教师返回数据解包
    /// </summary>
    /// <param name="data"></param>
    /// <param name="headint"></param>
    /// <returns></returns>
    public string UnpackTeacherData(byte[] data, int headint)
    {
        string jsonstr = string.Empty;

        int head = BitConverter.ToInt32(data, 0);
        //int head = BitConverter.ToInt32(data, 16);

        if (head == headint)
        {
            jsonstr = Encoding.UTF8.GetString(data, 4, data.Length - 4);
            //jsonstr = Encoding.UTF8.GetString(data, 20, data.Length - 20);
        }
        else
        {
            Debug.Log("head不相等!!!" + head);
        }

        return jsonstr;
    }



    /// <summary>
    /// 学生返回数据解包
    /// </summary>
    /// <param name="data"></param>
    /// <param name="headint"></param>
    /// <returns></returns>
    public string UnpackStudentData(byte[] data, int headint)
    {
        string jsonstr = string.Empty;

        //int head = BitConverter.ToInt32(data, 0);
        int head = BitConverter.ToInt32(data, 16);

        if (head == headint)
        {
            //jsonstr = Encoding.UTF8.GetString(data, 4, data.Length - 4);
            jsonstr = Encoding.UTF8.GetString(data, 20, data.Length - 20);
        }
        else
        {
            Debug.Log("head不相等!!!" + head);
        }

        return jsonstr;
    }




}

图片1

 

 

猜你喜欢

转载自blog.csdn.net/qq_37335907/article/details/129368077