Programmering

Hvordan jobbe med stikkontakter i C #

Inter-prosess kommunikasjon er muligheten til å utveksle data mellom to eller flere tilkoblede prosesser og kan oppnås ved hjelp av stikkontakter. Etter at en forbindelse mellom serveren og klienten, dvs. serverprosessen og klientprosessen er etablert, kan de kommunisere med det formål å utveksle data ved hjelp av stikkontakter.

En stikkontakt er sluttpunktet for en toveiskommunikasjon mellom to prosesser som kjører over et nettverk. Du kan utnytte navneområdene System.Net og System.Net.Sockets til å jobbe med stikkontakter i C #. Mens førstnevnte brukes til høyt nivåoperasjoner ved bruk av stikkontakter, brukes sistnevnte til alle operasjoner på lavt nivå når du arbeider med stikkontakter.

Når du arbeider med stikkontakter, kan du bruke kommunikasjonsmekanismene TCP / IP (Transmission Control Protocol / Internet protocol) eller UDP / IP (User Datagram Protocol / Internet protocol). For å utveksle data mellom to eller flere prosesser over et nettverk, kan du dra nytte av transportprotokollene TCP og UDP. Mens TCP (Transmission Control Protocol) er en sikker og pålitelig tilkoblingsorientert protokoll, er UDP (User Datagram Protocol) en relativt mindre sikker eller pålitelig, rask og tilkoblingsfri protokoll.

Følgende kodeliste illustrerer hvordan du kan dra nytte av klassen System.Net.Dns for å vise IP-adressen til systemet ditt.

public static void Main (streng [] args)

        {

streng vertsnavn = Dns.GetHostName ();

prøve

            {

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

foreach (IPAddress-adresse i ipAddress)

Console.WriteLine ("{0} / {1}", vertsnavn, adresse);

            }

fangst (Unntak eks)

            {

Console.WriteLine ("Feil oppstod:" + ex.Message);

            }

Console.Read ();

        }

Se kodelisten ovenfor. Mens metoden Dns.GetHostName () returnerer navnet på systemet, brukes metoden Dns.Resolve () til å hente en matrise av typen IPHostEntry.

Henter nettverksinformasjon

System.Net.NetworkInformation-navneområdet kan brukes til å hente nettverksmetadata (dvs. nettverksendringer, nettverkshendelser, egenskaper osv.) I C #. Hvis du for eksempel vil sjekke om en nettverkstilkobling er tilgjengelig, kan du bruke GetIsNetworkAvailable () -metoden som vist nedenfor.

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

Slik kan du kalle denne metoden i koden din.

Boolean networkAvailable = NetworkInterface.GetIsNetworkAvailable ();

Hvis du vil overvåke endringene i IP-adressen, kan du bruke følgende hendelser i NetworkChange-klassen.

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged

System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

For å hente informasjonen om nettverksgrensesnittene kan du bruke GetAllNetworkInterfaces () -metoden i klassen NetworkInterface.

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

Etter at du har hentet listen over alle nettverksgrensesnittene, kan du bruke følgende kode for å vise informasjonen til hvert av nettverksgrensesnittene i konsollen.

foreach (NetworkInterface networkInterface in networkInterfaces)

            {

Console.WriteLine ("Network ID:" + networkInterface.Id);

Console.WriteLine ("Network Name:" + networkInterface.Name);

Console.WriteLine ("Nettverksbeskrivelse \ n:" + networkInterface.Description);

            }

Her er den komplette kodelisten for din referanse.

statisk tomrom Main (streng [] args)

        {

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

foreach (NetworkInterface networkInterface in networkInterfaces)

            {

Console.WriteLine ("Network ID:" + networkInterface.Id);

Console.WriteLine ("Network Name:" + networkInterface.Name);

Console.WriteLine ("Nettverksbeskrivelse \ n:" + networkInterface.Description);

            }

Console.Read ();

        }

Client-Server programmering

Når du arbeider med nettverksprogrammering ved hjelp av TCP, må du vanligvis opprette en serverprosess som skal starte ved en bestemt port, og også en klientprosess som kan starte i hvilken som helst port og sende en tilkoblingsforespørsel til serveren. Serverprosessen etter at den er startet, lytter etter innkommende tilkoblingsforespørsler i porten den ble startet på. Følgende kodebit illustrerer hvordan du kan dra nytte av klassen System.Net.Sockets.TcpListener og bruke den sammen med socket-klassen.

TcpListener lytter = ny TcpListener (1234);

lytter.Start ();

Stikkontakt = lytter.AcceptSocket ();

Stream networkStream = nytt NetworkStream (stikkontakt);

Følgende kodebit illustrerer hvordan socket-klienten din kan koble til serveren ved hjelp av TCP-protokoll.

String ipAddress = "spesifiser ip-adressen her";

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

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

socketClient.Connect (remoteEndPoint);

For å sende data til serveren fra klienten, kan du bruke følgende kodebit.

prøve

{

Stringtekst = "Hello World!";

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

socketClient.Send (data);

}

fangst (SocketException se)

{

// Skriv din unntakshåndteringskode her

}

Receive () -metoden i socket-klassen kan brukes til å motta data. Slik kan du bruke den til å hente data fra en stikkontakt. Merk at både Send og mottak-metoden blokkerer, dvs. de vil blokkere den gjeldende kjøringen til data er sendt eller mottatt.

byte [] data = ny byte [1024];

int i = socketClient.Receive (data);

Vær oppmerksom på at du bør inkludere navneområdene System.Net og System.Net.Sockets i programmet ditt for å jobbe med stikkontakter.

ved hjelp av System.Net;

bruker System.Net.Sockets;

$config[zx-auto] not found$config[zx-overlay] not found