/// <summary> /// Main thread method /// </summary> private void ServerThread() { try { UdpState udpState = new UdpState(); udpState.IPEndPoint = new IPEndPoint(IPAddress.Any, ListenPort); udpState.UdpClient = new UdpClient(udpState.IPEndPoint); udpState.UdpClient.BeginReceive(new AsyncCallback(ReceiveCallback), udpState); // Main loop while (serverRunning) { } } catch (SocketException socketException) { if (OnSocketException != null) { OnSocketException(socketException); Stop(); } } }
/// <summary> /// AsyncCallback fro UDP receive /// </summary> /// <param name="ar">Async result</param> private void ReceiveCallback(IAsyncResult ar) { UdpState udpState = (UdpState)ar.AsyncState; UdpClient udpClient = udpState.UdpClient; IPEndPoint endPoint = udpState.IPEndPoint; byte[] data = udpClient.EndReceive(ar, ref endPoint); // Send the data back udpClient.Connect(endPoint); udpClient.Send(data, data.Length); udpClient.Close(); // Rise the event if (OnDataReceived != null) { OnDataReceived(endPoint, data); } udpState.IPEndPoint = new IPEndPoint(IPAddress.Any, ListenPort); udpState.UdpClient = new UdpClient(udpState.IPEndPoint); udpState.UdpClient.BeginReceive(new AsyncCallback(ReceiveCallback), udpState); }