Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    59

    [C#] Problema tempo programma Ping()

    Ho modificato un codice trovato sul web per eseguire un ping verso un'indirizzo specificato in una textbox1. Il programma è scritto in c# .net e presenta un problema durante l'esecuzione. Il ping verso il sito viene eseguito per 10 volte, succede però che nel risultato (stampato in un textbo2) certe volte compare come tempo impiegato <1ms. Il test viene eseguito verso maya.ngi.it.


    codice:
    private void ping()
            {
                byte[] data = new byte[1024];
                int recv, timestart, timestop;
                //creo socket pe comunicazione
                Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp);
                IPHostEntry iphe = Dns.GetHostEntry(textBox1.Text);
                IPEndPoint iep = new IPEndPoint(iphe.AddressList[0], 0);
                EndPoint ep = (EndPoint)iep;
                //creo pacchetto da inviare
                ICMP packet = new ICMP();
                packet.Type = 0x08;
                packet.Code = 0x00;
                packet.Checksum = 0;
                Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 0, 2);
                Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 2, 2);
                data = Encoding.ASCII.GetBytes("aaaabbbb");
                Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length);
                packet.MessageSize = data.Length + 4;
                int packetsize = packet.MessageSize + 4;
                UInt16 chcksum = packet.getChecksum();
                packet.Checksum = chcksum;
                textBox2.Text = "Inizio ping verso: " + ep.ToString() + "\r\n";
                host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);
                int badcount = 0;
                string time = "";
                //invio il comando per il ping per 10 volte
                for (int i = 0; i < 10; i++)
                {
                    host.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, 35);
                    host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep);
                    //misuro il tempo impiegato
                    timestart = Environment.TickCount;
                    //attendo una risposta
                    try
                    {
                        data = new byte[1024];
                        recv = host.ReceiveFrom(data, ref ep);
                        timestop = Environment.TickCount;
                        ICMP response = new ICMP(data, recv);
                        if ((timestop - timestart) < 1)
                        {
                            time = "<1";
                        }
                        else
                        {
                            time = (timestop - timestart).ToString();
                        }
                        //stampo il risultato
                        if (response.Type == 0 )
                        {
                            textBox2.Text = textBox2.Text + " response from " + ep.ToString() + ", " + time + "ms \r\n";
                            //label1.Text = label1.Text + ep.ToString() + " riched in " + i + " hops " + totaltime + "ms \n";
                        }
                        badcount = 0;
                    }
                    catch (SocketException)
                    {
                        textBox2.Text = textBox2.Text + "no response \r\n";
                        badcount++;
                        if (badcount == 5)
                        {
                            textBox2.Text = textBox2.Text + "no response host \r\n";
                        }
                    }
                }
                host.Close();
            }
    ecco qui due esempi con il programma e con ping.exe

    Inizio ping verso: 88.149.128.3:0
    response from 88.149.128.3:0, <1ms
    response from 88.149.128.3:0, 31ms
    response from 88.149.128.3:0, <1ms
    response from 88.149.128.3:0, 32ms
    response from 88.149.128.3:0, <1ms
    response from 88.149.128.3:0, 15ms
    response from 88.149.128.3:0, 16ms
    response from 88.149.128.3:0, 15ms
    response from 88.149.128.3:0, 16ms
    response from 88.149.128.3:0, 16ms


    Microsoft Windows [Version 6.1.7600]
    Copyright (c) 2009 Microsoft Corporation. All rights reserved.

    C:\Users\Daniele>ping maya.ngi.it

    Pinging maya.ngi.it [88.149.128.3] with 32 bytes of data:
    Reply from 88.149.128.3: bytes=32 time=14ms TTL=53
    Reply from 88.149.128.3: bytes=32 time=13ms TTL=53
    Reply from 88.149.128.3: bytes=32 time=14ms TTL=53
    Reply from 88.149.128.3: bytes=32 time=12ms TTL=53

    Ping statistics for 88.149.128.3:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
    Minimum = 12ms, Maximum = 14ms, Average = 13ms

    Dov'è che sbaglio?? GRazie

  2. #2
    E cosa c'è di sbagliato? :master:
    Probabilmente timestop è minore di timestart ..... il codice non è sbagliato .... fa quello che gli hai chiesto tu.

    Facci sapere...
    Ciao

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma la domanda qual e'?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    59
    Come mai ho dei tempi <1ms (=0 ms) verso maya.ngi.it cosa che secondo me non è possibile, quindi dove sbaglio??

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prova a controllare se, in quel caso, cosa succede quando esegue la

    recv = host.ReceiveFrom(data, ref ep);

    ovvero, se hai un errore nell'esecuzione della ReceiveFrom
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    59
    In caso ci fosse un'errore allora non verrebe eseguito il codice

    codice:
    if (response.Type == 0)
    {
    textBox2.BeginInvoke(new UpdateTextCallback(SetText), new object[] { " response from " + ep.ToString() + ", " + time + "ms \r\n" });
    }
    quindi non verrebbe stampata la risposta.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.