Programiranje

Kako delati z vtičnicami v jeziku C #

Medprocesna komunikacija je zmožnost izmenjave podatkov med dvema ali več povezanimi procesi in jo je mogoče doseči z uporabo vtičnic. Po vzpostavitvi povezave med strežnikom in odjemalcem, tj. Strežniškega procesa in odjemalskega procesa, lahko komunicirajo za izmenjavo podatkov s pomočjo vtičnic.

Vtičnica je končna točka dvosmerne komunikacije med dvema procesoma, ki se izvajata prek omrežja. Za delo z vtičnicami v C # lahko izkoristite imenska prostora System.Net in System.Net.Sockets. Medtem ko se prvi uporablja za operacije na visoki ravni z uporabo vtičnic, se drugi uporablja za vse nizke ravni pri delu z vtičnicami.

Pri delu z vtičnicami lahko uporabite komunikacijske mehanizme TCP / IP (Transmission Control Protocol / Internet Protocol) ali UDP / IP (User Datagram Protocol / Internet Protocol). Za izmenjavo podatkov med dvema ali več procesi prek omrežja lahko izkoristite transportna protokola TCP in UDP. Medtem ko je TCP (Transmission Control Protocol) varen in zanesljiv protokol, usmerjen v povezavo, je protokol UDP (User Datagram Protocol) razmeroma manj varen ali zanesljiv, hiter in brez povezave protokol.

Naslednji seznam kod ponazarja, kako lahko izkoristite razred System.Net.Dns za prikaz naslova IP vašega sistema.

javna statična praznina Main (string [] args)

        {

stringName gostitelja = Dns.GetHostName ();

poskusite

            {

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

foreach (naslov IPAddress v ipAddress)

Console.WriteLine ("{0} / {1}", ime gostitelja, naslov);

            }

ulov (izjema ex)

            {

Console.WriteLine ("Prišlo je do napake:" + ex.Message);

            }

Console.Read ();

        }

Glejte zgornji seznam kod. Medtem ko metoda Dns.GetHostName () vrne ime sistema, se metoda Dns.Resolve () uporablja za pridobivanje polja vrste IPHostEntry.

Pridobivanje omrežnih informacij

Imenski prostor System.Net.NetworkInformation se lahko uporablja za pridobivanje omrežnih metapodatkov (tj. Sprememb omrežja, omrežnih dogodkov, lastnosti itd.) V C #. Če želite na primer preveriti, ali je na voljo omrežna povezava, lahko uporabite metodo GetIsNetworkAvailable (), kot je prikazano spodaj.

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

Evo, kako lahko v svoji kodi pokličete to metodo.

Boolean networkAvailable = NetworkInterface.GetIsNetworkAvailable ();

Če želite spremljati spremembe naslova IP, lahko uporabite naslednje dogodke razreda NetworkChange.

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged

System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

Za pridobivanje informacij o omrežnih vmesnikih lahko uporabite metodo GetAllNetworkInterfaces () razreda NetworkInterface.

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

Ko pridobite seznam vseh omrežnih vmesnikov, lahko z naslednjo kodo prikažete informacije o vsakem omrežnem vmesniku v konzoli.

foreach (NetworkInterface networkInterface v networkInterfaces)

            {

Console.WriteLine ("ID omrežja:" + networkInterface.Id);

Console.WriteLine ("Ime omrežja:" + networkInterface.Name);

Console.WriteLine ("Opis omrežja \ n:" + networkInterface.Description);

            }

Tu je popoln seznam kod za vašo referenco.

statična praznina Main (string [] args)

        {

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

foreach (NetworkInterface networkInterface v networkInterfaces)

            {

Console.WriteLine ("ID omrežja:" + networkInterface.Id);

Console.WriteLine ("Ime omrežja:" + networkInterface.Name);

Console.WriteLine ("Opis omrežja \ n:" + networkInterface.Description);

            }

Console.Read ();

        }

Programiranje odjemalec-strežnik

Pri delu z omrežnim programiranjem z uporabo TCP bi morali običajno ustvariti strežniški proces, ki bi se moral začeti na določenih vratih, in tudi odjemalski proces, ki se lahko zažene na vseh vratih in strežniku pošlje zahtevo za povezavo. Strežniški postopek po zagonu posluša dohodne zahteve za povezavo na vratih, na katerih se je zagnal. Naslednji delček kode prikazuje, kako lahko izkoristite razred System.Net.Sockets.TcpListener in ga uporabite skupaj z razredom vtičnice.

Poslušalec TcpListener = nov TcpListener (1234);

listener.Start ();

Vtičnica vtičnica = poslušalec.AcceptSocket ();

Stream networkStream = nov NetworkStream (vtičnica);

Naslednji delček kode prikazuje, kako se odjemalec vtičnice lahko poveže s strežnikom s protokolom TCP.

String ipAddress = "tukaj navedite naslov ip";

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

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

socketClient.Connect (remoteEndPoint);

Če želite odjemalcu poslati podatke na strežnik, lahko uporabite naslednji delček kode.

poskusite

{

Besedilo v nizu = "Pozdravljen svet!";

bajt [] podatki = System.Text.Encoding.ASCII.GetBytes (besedilo);

socketClient.Send (podatki);

}

catch (SocketException se)

{

// Tukaj napišite kodo za ravnanje z izjemami

}

Za sprejem podatkov je mogoče uporabiti metodo Receive () razreda vtičnice. Tukaj je opisano, kako ga lahko uporabite za pridobivanje podatkov iz vtičnice. Upoštevajte, da blokirata način pošiljanja in prejemanja, tj. Blokirala bi trenutno izvajano nit, dokler podatki niso poslani ali prejeti.

bajt [] podatki = nov bajt [1024];

int i = socketClient.Receive (data);

Upoštevajte, da morate v svoj program vključiti imenska prostora System.Net in System.Net.Sockets za delo z vtičnicami.

z uporabo System.Net;

z uporabo System.Net.Sockets;

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