using UnityEngine; using UnityEngine.Assertions; using System.Text; #if UNITY_EDITOR using System.Net; using System.Net.Sockets; #else using System; using System.IO; using Windows.Networking.Sockets; #endif public class UDPClientUWP : MonoBehaviour { [SerializeField] int listenPort = 3333; void OnMessage(string msg) { //ここでメッセージの処理 Debug.Log("I Receive " + msg); } #if UNITY_EDITOR UdpClient udpClient; IPEndPoint endPoint; void Start() { Debug.Log("UnityStart"); endPoint = new IPEndPoint(IPAddress.Any, listenPort); udpClient = new UdpClient(endPoint); } void Update() { while (udpClient.Available > 0) { var data = udpClient.Receive(ref endPoint); OnMessage(Encoding.ASCII.GetString(data)); } } #else DatagramSocket socket; object lockObject = new object(); const int MAX_BUFFER_SIZE = 1024; async void Start() { Debug.Log("Start"); try { socket = new DatagramSocket(); socket.MessageReceived += OnMessage; await socket.BindServiceNameAsync(listenPort.ToString()); } catch (System.Exception e) { Debug.LogError(e.ToString()); } } void Update() { } async void OnMessage(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args) { using (var stream = args.GetDataStream().AsStreamForRead()) { byte[] buffer = new byte[MAX_BUFFER_SIZE]; await stream.ReadAsync(buffer, 0, MAX_BUFFER_SIZE); lock (lockObject) { OnMessage(Encoding.ASCII.GetString(buffer)); } } } #endif }