Programmēšana

Kā strādāt ar kontaktligzdām C #

Starpprocesu komunikācija ir spēja apmainīties ar datiem starp diviem vai vairākiem saistītiem procesiem, un to var panākt, izmantojot kontaktligzdas. Pēc tam, kad ir izveidots savienojums starp serveri un klientu, t.i., servera procesu un klienta procesu, tie var sazināties datu apmaiņas nolūkā, izmantojot ligzdas.

Ligzda ir divvirzienu komunikācijas galapunkts starp diviem tīklā notiekošiem procesiem. Varat izmantot System.Net un System.Net.Sockets nosaukumvietas darbam ar ligzdām C #. Kamēr pirmo izmanto augsta līmeņa darbībām, izmantojot kontaktligzdas, otro izmanto jebkurām zema līmeņa darbībām, strādājot ar kontaktligzdām.

Strādājot ar kontaktligzdām, varat izmantot TCP / IP (pārraides vadības protokols / interneta protokols) vai UDP / IP (lietotāja datagrammas protokols / interneta protokols) sakaru mehānismus. Lai tīklā apmainītos ar datiem starp diviem vai vairākiem procesiem, varat izmantot TCP un UDP transporta protokolu priekšrocības. Kamēr TCP (pārraides vadības protokols) ir drošs un uzticams uz savienojumu orientēts protokols, UDP (User Datagram Protocol) ir salīdzinoši mazāk drošs vai uzticams, ātrs un bez savienojuma protokols.

Šis kodu saraksts parāda, kā jūs varat izmantot System.Net.Dns klases priekšrocības, lai parādītu savas sistēmas IP adresi.

public static void Main (string [] args)

        {

virknes resursdatora nosaukums = Dns.GetHostName ();

mēģiniet

            {

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

foreach (IPAddress adrese ipAddress)

Console.WriteLine ("{0} / {1}", resursdatora nosaukums, adrese);

            }

nozveja (izņēmums ex)

            {

Console.WriteLine ("Radās kļūda:" + ex.Message);

            }

Konsole. Lasīt ();

        }

Skatiet iepriekš minēto kodu sarakstu. Kamēr metode Dns.GetHostName () atgriež sistēmas nosaukumu, metodi Dns.Resolve () izmanto, lai izgūtu IPHostEntry tipa masīvu.

Notiek tīkla informācijas izgūšana

Vārdvietu System.Net.NetworkInformation var izmantot, lai izgūtu tīkla metadatus (t.i., tīkla izmaiņas, tīkla notikumus, īpašības utt.) C #. Piemēram, ja vēlaties pārbaudīt, vai ir pieejams tīkla savienojums, varat izmantot metodi GetIsNetworkAvailable (), kā parādīts zemāk.

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

Lūk, kā jūs varat izsaukt šo metodi savā kodā.

Boolean networkAvailable = NetworkInterface.GetIsNetworkAvailable ();

Ja vēlaties pārraudzīt IP adreses izmaiņas, varat izmantot šādus NetworkChange klases notikumus.

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged

System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

Lai izgūtu informāciju par tīkla saskarnēm, varat izmantot klases NetworkInterface metodi GetAllNetworkInterfaces ().

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

Kad esat izguvis visu tīkla saskarņu sarakstu, varat izmantot šo koda daļu, lai konsolē parādītu informāciju par katru tīkla saskarni.

foreach (NetworkInterface networkInterface in NetworkInterfaces)

            {

Console.WriteLine ("Tīkla ID:" + networkInterface.Id);

Console.WriteLine ("Tīkla nosaukums:" + networkInterface.Name);

Console.WriteLine ("Tīkla apraksts \ n:" + networkInterface.Description);

            }

Šeit ir pilns kodu saraksts jūsu atsaucei.

static void Main (virkne [] args)

        {

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

foreach (NetworkInterface networkInterface in NetworkInterfaces)

            {

Console.WriteLine ("Tīkla ID:" + networkInterface.Id);

Console.WriteLine ("Tīkla nosaukums:" + networkInterface.Name);

Console.WriteLine ("Tīkla apraksts \ n:" + networkInterface.Description);

            }

Konsole. Lasīt ();

        }

Klienta-servera programmēšana

Strādājot ar tīkla programmēšanu, izmantojot TCP, parasti jāizveido servera process, kas jāsāk konkrētā ostā, kā arī klienta process, kuru var sākt jebkurā portā un nosūtīt savienojuma pieprasījumu serverim. Servera process pēc tā sākšanas klausās ienākošos savienojuma pieprasījumus ostā, kurā tas ir sākts. Šis koda fragments parāda, kā jūs varat izmantot System.Net.Sockets.TcpListener klases priekšrocības un izmantot to kopā ar ligzdu klasi.

TcpListener klausītājs = jauns TcpListener (1234);

klausītājs.Sākt ();

Kontaktligzdas ligzda = klausītājs. AcceptSocket ();

Stream networkStream = jauns NetworkStream (ligzda);

Šis koda fragments parāda, kā jūsu ligzdas klients var izveidot savienojumu ar serveri, izmantojot TCP protokolu.

String ipAddress = "šeit norādiet ip adresi";

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

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

socketClient.Connect (remoteEndPoint);

Lai no klienta nosūtītu datus serverim, varat izmantot šo koda fragmentu.

mēģiniet

{

Virknes teksts = "Sveika pasaule!";

baits [] dati = System.Text.Encoding.ASCII.GetBytes (teksts);

socketClient.Send (dati);

}

noķert (SocketException se)

{

// Šeit ierakstiet izņēmumu apstrādes kodu

}

Datu saņemšanai var izmantot ligzdu klases metodi Receive (). Lūk, kā to izmantot, lai izgūtu datus no kontaktligzdas. Ņemiet vērā, ka gan sūtīšanas, gan saņemšanas metodes tiek bloķētas, t.i., tās bloķēs pašreiz izpildīto pavedienu, līdz dati tiks nosūtīti vai saņemti.

baits [] dati = jauns baits [1024];

int i = socketClient. Saņemt (dati);

Ņemiet vērā, ka, lai strādātu ar ligzdām, programmā jāiekļauj vārda vietas System.Net un System.Net.Sockets.

izmantojot System.Net;

izmantojot System.Net.Sockets;

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