/// <summary> /// Start the server to receive datagrams. Before calling this method, set the 'DatagramReceived' event. /// </summary> public void StartServer() { State state = new State(_MaxDatagramSize); _Socket.BeginReceiveFrom(state.Buffer, 0, _MaxDatagramSize, SocketFlags.None, ref _Endpoint, _ReceiveCallback = (ar) => { State so = (State)ar.AsyncState; _Socket.BeginReceiveFrom(so.Buffer, 0, _MaxDatagramSize, SocketFlags.None, ref _Endpoint, _ReceiveCallback, so); int bytes = _Socket.EndReceiveFrom(ar, ref _Endpoint); string ipPort = _Endpoint.ToString(); string ip = null; int port = 0; Common.ParseIpPort(ipPort, out ip, out port); if (!_RemoteSockets.Contains(ipPort)) { _RemoteSockets.AddReplace(ipPort, _Socket); EndpointDetected?.Invoke(this, new EndpointMetadata(ip, port)); } if (bytes == so.Buffer.Length) { DatagramReceived?.Invoke(this, new Datagram(ip, port, so.Buffer)); } else { byte[] buffer = new byte[bytes]; Buffer.BlockCopy(so.Buffer, 0, buffer, 0, bytes); DatagramReceived?.Invoke(this, new Datagram(ip, port, buffer)); } }, state); }
public void ProcessTask( ) { while (IsRunning) { if (ReceiveQueue.TryDequeue(out ReceiveDatagram datagram)) { DatagramReceived? .Invoke(this, new ReceiveDatagramEventArgs ( datagram )); } else { Thread.Sleep(20); } } }
private async void Listen() { await Task.Run(async() => { var wait = new SpinWait(); while (IsActive) { var receiveResult = await _client.ReceiveAsync(); var eventArgs = new DatagramReceivedArgs(receiveResult.Buffer, receiveResult.RemoteEndPoint); DatagramReceived?.Invoke(this, eventArgs); if (eventArgs.Reply != null) { await _client.SendAsync(eventArgs.Reply, eventArgs.Reply.Length, eventArgs.RemoteEndpoint); } wait.SpinOnce(); } }); }
public void ExecuteUdpListenerLoop() { while (true) { try { var remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); var data = _udpListener.Receive(ref remoteEndPoint); DatagramReceived?.Invoke(this, new DataGramReceivedArgs { Data = data, Sender = remoteEndPoint, }); } catch (Exception e) { } } }
private async void Listen() { await Task.Run(async() => { using (var client = new UdpClient(Port)) { while (IsActive) { var receiveResult = await client.ReceiveAsync(); var eventArgs = new DatagramReceivedArgs(receiveResult.Buffer, receiveResult.RemoteEndPoint); DatagramReceived?.Invoke(this, eventArgs); if (eventArgs.Reply != null) { await client.SendAsync(eventArgs.Reply, eventArgs.Reply.Length, eventArgs.RemoteEndpoint); } } } }); }
/// <summary> /// 接收到数据报文事件 /// </summary> /// <param name="sender"></param> /// <param name="datagram"></param> private void RaiseDatagramReceived(TcpClient sender, byte[] datagram) { DatagramReceived?.Invoke(this, new TcpDatagramReceivedEventArgs <byte[]>(sender, datagram)); }
/// <summary> /// 接收数据报文事件 /// </summary> /// <param name="sender"></param> /// <param name="datagram"></param> private void OnDatagramReceived(AsyncTCPClient sender, byte[] datagram) { DatagramReceived?.Invoke(this, new TCPDatagramReceiveEventArgs <byte[]>(sender, datagram)); }
private void RaiseDatagramReceived(TcpClient tcpClient, byte[] receivedBytes) { DatagramReceived?.Invoke(this, new TcpDatagramReceivedEventArgs <byte[]>(tcpClient, receivedBytes)); }