Programování

Jak pracovat se zásuvkami v C #

Meziprocesní komunikace je schopnost vyměňovat si data mezi dvěma nebo více propojenými procesy a lze ji dosáhnout pomocí soketů. Po navázání spojení mezi serverem a klientem, tj. Procesu serveru a procesu klienta, mohou komunikovat za účelem výměny dat pomocí soketů.

Soket je koncový bod obousměrné komunikace mezi dvěma procesy běžícími po síti. Pro práci se sokety v C # můžete využít obory názvů System.Net a System.Net.Sockets. Zatímco první se používá pro operace na vysoké úrovni pomocí soketů, druhý se používá pro jakékoli operace na nízké úrovni při práci se sokety.

Při práci se sokety můžete použít komunikační mechanismy TCP / IP (Transmission Control Protocol / Internet protocol) nebo UDP / IP (User Datagram Protocol / Internet protocol). Aby bylo možné vyměňovat data mezi dvěma nebo více procesy v síti, můžete využít transportní protokoly TCP a UDP. Zatímco TCP (Transmission Control Protocol) je bezpečný a spolehlivý protokol orientovaný na připojení, UDP (User Datagram Protocol) je relativně méně bezpečný nebo spolehlivý, rychlý a bez připojení.

Následující výpis kódu ukazuje, jak můžete využít třídu System.Net.Dns k zobrazení IP adresy vašeho systému.

public static void Main (řetězec [] args)

        {

řetězec hostName = Dns.GetHostName ();

Snaž se

            {

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

foreach (adresa IPAddress v adrese ipAddress)

Console.WriteLine ("{0} / {1}", název hostitele, adresa);

            }

úlovek (výjimka mimo)

            {

Console.WriteLine ("Došlo k chybě:" + např. Zpráva);

            }

Console.Read ();

        }

Viz výše uvedený seznam kódů. Zatímco metoda Dns.GetHostName () vrací název systému, metoda Dns.Resolve () se používá k načtení pole typu IPHostEntry.

Načítání informací o síti

Obor názvů System.Net.NetworkInformation lze použít k načtení síťových metadat (tj. Síťových změn, síťových událostí, vlastností atd.) V C #. Například pokud chcete zkontrolovat, zda je k dispozici síťové připojení, můžete použít metodu GetIsNetworkAvailable (), jak je znázorněno níže.

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

Zde je způsob, jak můžete tuto metodu v kódu zavolat.

Boolean networkAvailable = NetworkInterface.GetIsNetworkAvailable ();

Pokud chcete sledovat změny IP adresy, můžete použít následující události třídy NetworkChange.

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged

System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

K načtení informací o síťových rozhraních můžete použít metodu GetAllNetworkInterfaces () třídy NetworkInterface.

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

Poté, co načtete seznam všech síťových rozhraní, můžete použít následující část kódu k zobrazení informací o každém ze síťových rozhraní v konzole.

foreach (NetworkInterface networkInterface v networkInterfaces)

            {

Console.WriteLine ("ID sítě:" + networkInterface.Id);

Console.WriteLine ("Název sítě:" + networkInterface.Name);

Console.WriteLine ("Popis sítě \ n:" + networkInterface.Description);

            }

Zde je kompletní seznam kódů pro vaši referenci.

static void Main (řetězec [] args)

        {

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

foreach (NetworkInterface networkInterface v networkInterfaces)

            {

Console.WriteLine ("ID sítě:" + networkInterface.Id);

Console.WriteLine ("Název sítě:" + networkInterface.Name);

Console.WriteLine ("Popis sítě \ n:" + networkInterface.Description);

            }

Console.Read ();

        }

Programování klient-server

Při práci se síťovým programováním pomocí protokolu TCP byste obvykle museli vytvořit proces serveru, který by měl začínat na konkrétním portu, a také proces klienta, který lze spustit na kterémkoli portu a odeslat na server požadavek na připojení. Proces serveru po spuštění naslouchá příchozím požadavkům na připojení na portu, na kterém byl spuštěn. Následující fragment kódu ukazuje, jak můžete využít třídu System.Net.Sockets.TcpListener a použít ji ve spojení s třídou soketu.

Posluchač TcpListener = nový TcpListener (1234);

listener.Start ();

Socket socket = listener.AcceptSocket ();

Streamovat networkStream = nový NetworkStream (soket);

Následující fragment kódu ukazuje, jak se může váš klient soketu připojit k serveru pomocí protokolu TCP.

Řetězec ipAddress = "zde zadejte IP adresu";

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

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

socketClient.Connect (remoteEndPoint);

Chcete-li odeslat data na server z klienta, můžete použít následující fragment kódu.

Snaž se

{

String text = "Hello World!";

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

socketClient.Send (data);

}

catch (SocketException se)

{

// Sem napište kód pro zpracování výjimek

}

K příjmu dat lze použít metodu Receive () třídy soketu. Zde je návod, jak jej můžete použít k načtení dat ze zásuvky. Všimněte si, že obě metody Send a Receive blokují, tj. Budou blokovat aktuálně provádějící vlákno, dokud nebudou odeslána nebo přijata data.

byte [] data = nový bajt [1024];

int i = socketClient.Receive (data);

Všimněte si, že byste měli do svého programu začlenit obory názvů System.Net a System.Net.Sockets, abyste mohli pracovat se sokety.

pomocí System.Net;

pomocí System.Net.Sockets;