Kako raditi s utičnicama na C #

Međuprocesna komunikacija sposobnost je razmjene podataka između dva ili više povezanih procesa i može se postići pomoću utičnica. Nakon što se uspostavi veza između poslužitelja i klijenta, tj. Proces poslužitelja i proces klijenta, oni mogu komunicirati u svrhu razmjene podataka pomoću utičnica.

Socket je krajnja točka dvosmjerne komunikacije između dva procesa koja se izvode preko mreže. Možete koristiti prostore imena System.Net i System.Net.Sockets za rad s utičnicama u C #. Dok se prva koristi za operacije na visokoj razini pomoću utičnica, druga se koristi za bilo koje operacije na niskoj razini pri radu s utičnicama.

Kada radite s utičnicama možete koristiti TCP / IP (protokol kontrole prijenosa / internetski protokol) ili UDP / IP (korisnički datagram protokol / internetski protokol) komunikacijske mehanizme. Da biste razmijenili podatke između dva ili više procesa putem mreže, možete iskoristiti TCP i UDP transportne protokole. Iako je TCP (Transmission Control Protocol) siguran i pouzdan protokol orijentiran na povezivanje, UDP (User Datagram Protocol) je relativno manje siguran ili pouzdan, brz i bez veze.

Sljedeći popis kodova ilustrira kako možete iskoristiti klasu System.Net.Dns za prikaz IP adrese vašeg sustava.

public static void Main(string[] args)

        {

            string hostName = Dns.GetHostName();

            try

            {

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

                foreach (IPAddress address in ipAddress)

                    Console.WriteLine("{0}/{1}", hostName, address);

            }

            catch (Exception ex)

            {

                Console.WriteLine("Error occurred: "+ex.Message);

            }

            Console.Read();

        }

Pogledajte gornji popis kodova. Iako metoda Dns.GetHostName () vraća ime sustava, metoda Dns.Resolve () koristi se za dohvaćanje niza tipa IPHostEntry.

Dohvaćanje mrežnih podataka

Prostor imena System.Net.NetworkInformation može se koristiti za dohvaćanje mrežnih metapodataka (tj. Mrežnih promjena, mrežnih događaja, svojstava itd.) U C #. Kao primjer, ako želite provjeriti je li mrežna veza dostupna, možete koristiti metodu GetIsNetworkAvailable () kako je prikazano u nastavku.

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

Evo kako možete pozvati ovu metodu u svom kodu.

Boolean networkAvailable = NetworkInterface.GetIsNetworkAvailable();

Ako želite pratiti promjene na IP adresi, možete koristiti sljedeće događaje klase NetworkChange.

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged

System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

Da biste dohvatili informacije o mrežnim sučeljima, možete koristiti metodu GetAllNetworkInterfaces () klase NetworkInterface.

NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

Nakon što ste dohvatili popis svih mrežnih sučelja, možete upotrijebiti sljedeći kôd za prikaz podataka svakog mrežnog sučelja u konzoli.

foreach (NetworkInterface networkInterface in networkInterfaces)

            {

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

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

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

            }

Evo kompletnog popisa kodova za vašu referencu.

static void Main(string[] args)

        {

            NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

            foreach (NetworkInterface networkInterface in networkInterfaces)

            {

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

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

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

            }

            Console.Read();

        }

Programiranje klijent-poslužitelj

Kada radite s mrežnim programiranjem pomoću TCP-a, obično biste trebali stvoriti poslužiteljski proces koji bi trebao započeti na određenoj luci, a također i klijentski proces koji se može pokrenuti na bilo kojem priključku i poslati zahtjev za povezivanje poslužitelju. Proces poslužitelja nakon što je pokrenut, osluškuje dolazne zahtjeve za povezivanje na priključku na kojem je pokrenut. Sljedeći isječak koda ilustrira kako možete iskoristiti klasu System.Net.Sockets.TcpListener i koristiti je zajedno s klasom socket.

TcpListener listener = new TcpListener(1234);

listener.Start();

Socket socket = listener.AcceptSocket();

Stream networkStream = new NetworkStream(socket);

Sljedeći isječak koda ilustrira kako se vaš socket klijent može povezati s poslužiteljem pomoću TCP protokola.

String ipAddress = "specify the ip address here";

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

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

socketClient.Connect (remoteEndPoint);

Da biste klijentu poslali podatke na poslužitelj, možete upotrijebiti sljedeći isječak koda.

try

{

  String text = "Hello World!";

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

  socketClient.Send(data);

}

catch (SocketException se)

{

  //Write your exception handling code here

}

Za primanje podataka može se koristiti metoda Receive () klase socket. Evo kako ga možete koristiti za dohvaćanje podataka iz utičnice. Imajte na umu da i metode slanja i primanja blokiraju, tj. Blokirale bi trenutno izvršnu nit dok podaci ne budu poslani ili primljeni.

byte[] data = new byte[1024];

int i = socketClient.Receive (data);

Imajte na umu da biste za rad s utičnicama trebali uključiti prostore imena System.Net i System.Net.Sockets u svoj program.

using System.Net;

using System.Net.Sockets;