Avatar billede _et Praktikant
09. oktober 2012 - 14:34 Der er 8 kommentarer og
1 løsning

Få statestik eller antal retransmits på afsendelse ip pakker

Er det muligt fra C# at få en tilbagemelding fra Windows på hvis en IP pakke bliver retransmitteret?

Eller noget lignede såsom statistik på udgående transport fra en applikation?

Mvh
Teddy
Avatar billede _et Praktikant
09. oktober 2012 - 14:38 #1
Det er Socket+TCP
Avatar billede Syska Mester
09. oktober 2012 - 14:47 #2
Nej.

Da det er på OSI modellen lag 3-4 ...

Du kan måske få et generelt overblik via NetworkInformation klassen i .NET ( Tror jeg nok den hedder, men ikke per app )

Så skal du vist ud i noget .NET Pinvoke og C++ som kan få fat i de nedre lag i OSI modellen.
Avatar billede _et Praktikant
09. oktober 2012 - 15:07 #3
System.Net.NetworkInformation - Yes

Men jeg kan ikke bruge general info til noget.
Men tak for forsøget

Jeg har en app der sender til GPRS net hvilket er ustabilt i "klumper" Jeg vil gerne have mulighed for at detekterer disse "klumper" så jeg kan reagerer på dem.

Det var lige sådan noget Pinvoke jeg søgte, men er ikke så skrap indenfor det selv - Måske Arne eller lignede har en løsning ;-)
Avatar billede arne_v Ekspert
10. oktober 2012 - 04:18 #4
Du kan proeve med denne her kode:

using System;
using System.Runtime.InteropServices;

namespace E
{
    public class Program
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct MIB_TCPSTATS
        {
            public int dwRtoAlgorithm ;
            public int dwRtoMin ;
            public int dwRtoMax ;
            public int dwMaxConn ;
            public int dwActiveOpens ;
            public int dwPassiveOpens ;
            public int dwAttemptFails ;
            public int dwEstabResets ;
            public int dwCurrEstab ;
            public int dwInSegs ;
            public int dwOutSegs ;
            public int dwRetransSegs ;
            public int dwInErrs ;
            public int dwOutRsts ;
            public int dwNumConns ;
        }
        [DllImport("iphlpapi.dll",SetLastError=true)]
        public extern static int GetTcpStatistics (out MIB_TCPSTATS pStats );
        public static void Main(string[] args)
        {
            MIB_TCPSTATS tcpstats;
            GetTcpStatistics(out tcpstats);
            Console.WriteLine(tcpstats.dwRetransSegs);
            Console.ReadKey();
        }
    }
}
Avatar billede _et Praktikant
10. oktober 2012 - 11:48 #5
Super - Tak arne.

Jeg prøver lidt senere.
Tak for det.
Avatar billede _et Praktikant
11. oktober 2012 - 13:55 #6
Fint eksempel Arne - Det virker som det skal men desværre også kun på basis af hele TCP stakken.

kan man ikke "nøjes" med info fra en bestemt applikation?

Mvh
Avatar billede arne_v Ekspert
11. oktober 2012 - 15:30 #7
Jeg ved ihvertfald ikke hvordan.

Men jeg tvivler.

TCP retransmit sker paa TCP niveau og jeg kan ikke forestille mig at driveren laver statistik per app eller per IP adresse.
Avatar billede _et Praktikant
11. oktober 2012 - 15:39 #8
Øv - jeg synes nok det bar den vej..

men tak for dit indlæg, det gav anledning til en sjov lille TCP statistik app.

Hvis du vil have point så svar.

I hvert fald mange tak for hjælpen, jeg viste du var mand for noget interessant :-)

mvh
Avatar billede arne_v Ekspert
11. oktober 2012 - 15:57 #9
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester