在Unity3d中使用Netly开启TCP服务
github、文档
实测Windows和安卓上可运行
using Byter;
using Netly;
using System;
using System.Collections.Generic;
using System.Net;
using UnityEngine;
using UnityEngine.UI;public class NetlyTest : MonoBehaviour
{public Text textPrompt;public Text textClientCount;TCP.Server server;void Start(){server = new TCP.Server(isFraming: false);server.On.Open(() =>{Log($"Server started at: {server.Host}");});server.On.Close(() =>{Log($"Server stopped at: {server.Host}");});server.On.Error((exception) =>{Log($"Error: {exception}");});server.On.Accept((client) =>{// scope reserved to each client// each client have on scope like this.// it mean each client will have own instance of eventData and rawDataList<(string message, byte[] data)> eventData = new();List<byte[]> rawData = new();Log("Client connected");client.On.Open(() =>{});client.On.Close(() =>{// client closed;Log($"Client {client.Host} disconnected");// clean all data received by this clientrawData.Clear();eventData.Clear();});client.On.Data((bytes) =>{Log($"Client data ({client.Host}): {bytes.GetString()}");server.To.DataBroadcast(bytes); // broadcast data// save history of datarawData.Add(bytes);});client.On.Event((name, bytes) =>{Log($"Client event ({name}): ({client.Host}): {bytes.GetString()}");server.To.EventBroadcast(name, bytes); // broadcast event// save history of eventseventData.Add((name, bytes));});});server.To.Open(new Host(IPAddress.Any, 8080));}// Update is called once per framevoid Update(){if (Time.frameCount % 5 == 0){textClientCount.text = ($"server.Clients.Length = {server.Clients.Length}");}}void Log(string text){textPrompt.text = text;Debug.Log(text);}
}
