Programovanie

Ako pracovať so zásuvkami v C #

Medziprocesová komunikácia je schopnosť vymieňať si údaje medzi dvoma alebo viacerými prepojenými procesmi a dá sa dosiahnuť pomocou zásuviek. Po vytvorení spojenia medzi serverom a klientom, t. J. Procesom servera a procesom klienta, môžu komunikovať za účelom výmeny údajov pomocou zásuviek.

Soket je koncový bod obojsmernej komunikácie medzi dvoma procesmi bežiacimi v sieti. Môžete použiť menné priestory System.Net a System.Net.Sockets na prácu so soketmi v C #. Zatiaľ čo prvý sa používa na operácie na vysokej úrovni pomocou zásuviek, druhý sa používa na akékoľvek operácie na nízkej úrovni pri práci so zásuvkami.

Pri práci so soketmi môžete použiť buď komunikačné mechanizmy TCP / IP (Transmission Control Protocol / Internet protocol) alebo UDP / IP (User Datagram Protocol / Internet protocol). Na výmenu údajov medzi dvoma alebo viacerými procesmi v sieti môžete využiť transportné protokoly TCP a UDP. Zatiaľ čo TCP (Transmission Control Protocol) je bezpečný a spoľahlivý protokol zameraný na pripojenie, UDP (User Datagram Protocol) je relatívne menej bezpečný alebo spoľahlivý, rýchly a bez pripojenia.

Nasledujúci zoznam kódov ilustruje, ako môžete využiť výhody triedy System.Net.Dns na zobrazenie adresy IP vášho systému.

public static void Main (reťazec [] args)

        {

reťazec hostName = Dns.GetHostName ();

skús

            {

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

foreach (adresa IPAddress v adrese ipAddress)

Console.WriteLine ("{0} / {1}", názov hostiteľa, adresa);

            }

úlovok (výnimka okrem)

            {

Console.WriteLine ("Vyskytla sa chyba:" + napr. Správa);

            }

Console.Read ();

        }

Prečítajte si zoznam kódov vyššie. Zatiaľ čo metóda Dns.GetHostName () vracia názov systému, metóda Dns.Resolve () sa používa na získanie poľa typu IPHostEntry.

Načítavajú sa informácie o sieti

Obor názvov System.Net.NetworkInformation je možné použiť na načítanie sieťových metadát (t. J. Zmien v sieti, udalostí v sieti, vlastností atď.) V C #. Napríklad ak chcete skontrolovať, či je k dispozícii sieťové pripojenie, môžete použiť metódu GetIsNetworkAvailable (), ako je uvedené nižšie.

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

Tu je príklad, ako môžete vo svojom kóde zavolať túto metódu.

Boolean networkAvailable = NetworkInterface.GetIsNetworkAvailable ();

Ak chcete sledovať zmeny IP adresy, môžete použiť nasledujúce udalosti triedy NetworkChange.

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged

System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

Na získanie informácií o sieťových rozhraniach môžete použiť metódu GetAllNetworkInterfaces () triedy NetworkInterface.

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

Po načítaní zoznamu všetkých sieťových rozhraní môžete pomocou nasledujúcej časti kódu zobraziť informácie o každom zo sieťových rozhraní v konzole.

foreach (NetworkInterface networkInterface v networkInterfaces)

            {

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

Console.WriteLine ("Názov siete:" + networkInterface.Name);

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

            }

Tu je kompletný zoznam kódov pre vašu referenciu.

static void Main (reťazec [] args)

        {

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

foreach (NetworkInterface networkInterface v networkInterfaces)

            {

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

Console.WriteLine ("Názov siete:" + networkInterface.Name);

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

            }

Console.Read ();

        }

Programovanie klient-server

Pri práci so sieťovým programovaním pomocou protokolu TCP by ste zvyčajne museli vytvoriť proces servera, ktorý by sa mal začať na konkrétnom porte, a tiež proces klienta, ktorý sa môže spustiť na ľubovoľnom porte a odoslať serveru požiadavku na pripojenie. Proces servera po spustení počúva prichádzajúce požiadavky na pripojenie na porte, na ktorom bol spustený. Nasledujúci úryvok kódu ilustruje, ako môžete využiť výhody triedy System.Net.Sockets.TcpListener a používať ju v spojení s triedou soketu.

Poslucháč TcpListener = nový TcpListener (1234);

poslucháč.Start ();

Socket socket = listener.AcceptSocket ();

Stream networkStream = nový NetworkStream (soket);

Nasledujúci úryvok kódu ilustruje, ako sa váš klient soketu môže pripojiť k serveru pomocou protokolu TCP.

Reťazec ipAddress = "tu zadajte IP adresu";

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

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

socketClient.Connect (remoteEndPoint);

Na odoslanie údajov na server z klienta môžete použiť nasledujúci útržok kódu.

skús

{

String text = "Hello World!";

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

socketClient.Send (údaje);

}

catch (SocketException se)

{

// Sem napíš svoj kód na spracovanie výnimiek

}

Na príjem údajov je možné použiť metódu Receive () triedy soketov. Tu je príklad, ako ho môžete použiť na načítanie údajov zo soketu. Všimnite si, že obidve metódy Send a Receive blokujú, t. J. Blokujú aktuálne vykonávajúce vlákno, kým nebudú odoslané alebo prijaté údaje.

byte [] dáta = nový bajt [1024];

int i = socketClient.Receive (údaje);

Pamätajte, že do svojho programu by ste mali začleniť menné priestory System.Net a System.Net.Sockets, aby ste mohli pracovať so soketmi.

pomocou System.Net;

pomocou System.Net.Sockets;

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