Programmering

Sådan arbejder du med stikkontakter i C #

Inter-proces kommunikation er evnen til at udveksle data mellem to eller flere forbundne processer og kan opnås ved hjælp af sockets. Efter en forbindelse mellem serveren og klienten, dvs. serverprocessen og klientprocessen er etableret, kan de kommunikere med det formål at udveksle data ved hjælp af sockets.

Et stik er slutpunktet for en tovejskommunikation mellem to processer, der kører over et netværk. Du kan udnytte navneområderne System.Net og System.Net.Sockets til at arbejde med sockets i C #. Mens førstnævnte bruges til operationer på højt niveau ved hjælp af stikkontakter, bruges sidstnævnte til alle operationer på lavt niveau, når man arbejder med stikkontakter.

Når du arbejder med stikkontakter, kan du bruge enten TCP / IP (Transmission Control Protocol / Internet protocol) eller UDP / IP (User Datagram Protocol / Internet protocol) kommunikationsmekanismer. For at udveksle data mellem to eller flere processer over et netværk kan du drage fordel af TCP- og UDP-transportprotokollerne. Mens TCP (Transmission Control Protocol) er en sikker og pålidelig forbindelsesorienteret protokol, er UDP (User Datagram Protocol) en relativt mindre sikker eller pålidelig, hurtig og forbindelsesfri protokol.

Følgende kodeliste illustrerer, hvordan du kan drage fordel af klassen System.Net.Dns til at få vist systemets IP-adresse.

offentlig statisk tomrum Main (streng [] args)

        {

streng værtnavn = Dns.GetHostName ();

prøve

            {

IPAddress [] ipAddress = Dns.Resolve (hostName) .AddressList;

foreach (IPAddress-adresse i ipAddress)

Console.WriteLine ("{0} / {1}", værtsnavn, adresse);

            }

fangst (undtagelse ex)

            {

Console.WriteLine ("Der opstod en fejl:" + ex.Message);

            }

Console.Read ();

        }

Se kodelisten ovenfor. Mens metoden Dns.GetHostName () returnerer systemets navn, bruges metoden Dns.Resolve () til at hente en matrix af typen IPHostEntry.

Henter netværksoplysninger

System.Net.NetworkInformation-navneområdet kan bruges til at hente netværksmetadata (dvs. netværksændringer, netværkshændelser, egenskaber osv.) I C #. Hvis du f.eks. Vil kontrollere, om en netværksforbindelse er tilgængelig, kan du bruge GetIsNetworkAvailable () -metoden som vist nedenfor.

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable ();

Sådan kan du kalde denne metode i din kode.

Boolean networkAvailable = NetworkInterface.GetIsNetworkAvailable ();

Hvis du vil overvåge ændringer i IP-adressen, kan du bruge følgende begivenheder i klassen NetworkChange.

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged

System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

For at hente oplysningerne om netværksgrænsefladerne kan du bruge metoden GetAllNetworkInterfaces () i klassen NetworkInterface.

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

Når du har hentet listen over alle netværksgrænseflader, kan du bruge følgende stykke kode til at vise oplysningerne om hver af netværksgrænsefladerne i konsollen.

foreach (NetworkInterface networkInterface in networkInterfaces)

            {

Console.WriteLine ("Netværks-id:" + networkInterface.Id);

Console.WriteLine ("Netværksnavn:" + networkInterface.Name);

Console.WriteLine ("Netværksbeskrivelse \ n:" + networkInterface.Description);

            }

Her er den komplette kodeliste til din reference.

statisk ugyldigt Main (streng [] args)

        {

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

foreach (NetworkInterface networkInterface in networkInterfaces)

            {

Console.WriteLine ("Netværks-id:" + networkInterface.Id);

Console.WriteLine ("Netværksnavn:" + networkInterface.Name);

Console.WriteLine ("Netværksbeskrivelse \ n:" + networkInterface.Description);

            }

Console.Read ();

        }

Client-Server programmering

Når du arbejder med netværksprogrammering ved hjælp af TCP, skal du typisk oprette en serverproces, der skal starte ved en bestemt port og også en klientproces, der kan starte på en hvilken som helst port og sende en forbindelsesanmodning til serveren. Serverprocessen, efter at den er startet, lytter til indgående forbindelsesanmodninger i den port, den er startet på. Følgende kodestykke illustrerer, hvordan du kan drage fordel af klassen System.Net.Sockets.TcpListener og bruge den sammen med sokkelklassen.

TcpListener lytter = ny TcpListener (1234);

lytter.Start ();

Socket-stik = lytter.AcceptSocket ();

Stream networkStream = nyt NetworkStream (stikkontakt);

Følgende kodestykke illustrerer, hvordan din socket-klient kan oprette forbindelse til serveren ved hjælp af TCP-protokol.

String ipAddress = "angiv ip-adressen her";

System.Net.IPAddress ipAddress = System.Net.IPAddress.Parse (ipAddress);

System.Net.IPEndPoint remoteEndPoint = ny IPEndPoint (ipAddress, 9000);

socketClient.Connect (remoteEndPoint);

For at sende data til serveren fra klienten kan du bruge følgende kodestykke.

prøve

{

Strengtekst = "Hej verden!";

byte [] data = System.Text.Encoding.ASCII.GetBytes (tekst);

socketClient.Send (data);

}

fange (SocketException se)

{

// Skriv din undtagelseshåndteringskode her

}

Modtagemetoden () i socket-klassen kan bruges til at modtage data. Sådan kan du bruge det til at hente data fra et stik. Bemærk, at både Send- og modtagemetoderne blokerer, dvs. de vil blokere den aktuelt udførende tråd, indtil data er sendt eller modtaget.

byte [] data = ny byte [1024];

int i = socketClient.Receive (data);

Bemærk, at du skal indarbejde navneområdet System.Net og System.Net.Sockets i dit program for at arbejde med sockets.

ved hjælp af System.Net;

ved hjælp af System.Net.Sockets;