public ResultadoPing Executar() { this.Executado = true; IPEndPoint ep = null; var resultado = new ResultadoPing(); var udpClient = new UdpClient(IPDestino, PortaDestino); var bytesEnviados = Encoding.ASCII.GetBytes("PING"); Log(string.Format("Enviando PING para [{0}] através da porta [{1}]:", IPDestino, PortaDestino)); for (int i = 0; i < numeroPacotes; i++) { var pacotePing = new PacotePing(); pacotePing.Bytes = 4; pacotePing.Estado = EstadoPacotePing.Enviado; try { var dataInicio = DateTime.Now; udpClient.Send(bytesEnviados, bytesEnviados.Length); udpClient.Client.ReceiveTimeout = 1000; var bytesRecebidos = udpClient.Receive(ref ep); var dataFim = DateTime.Now; var retorno = Encoding.ASCII.GetString(bytesRecebidos); if (retorno == "PING") { pacotePing.Estado = pacotePing.Estado | EstadoPacotePing.Recebido; pacotePing.Tempo = dataFim - dataInicio; Log(string.Format("Resposta: bytes={0} tempo={1}ms.", pacotePing.Bytes, (int)pacotePing.Tempo.TotalMilliseconds)); } } catch (SocketException) { pacotePing.Estado = pacotePing.Estado | EstadoPacotePing.Perdido; Log("Esgotado o tempo limite do pedido."); } resultado.AdicionarPacotePing(pacotePing); } return resultado; }
public void AdicionarPacotePing(PacotePing pacote) { Pacotes.Add(pacote); }