Προγραμματισμός

Πώς να εργαστείτε με πρίζες στο C #

Η επικοινωνία μεταξύ διεργασιών είναι η δυνατότητα ανταλλαγής δεδομένων μεταξύ δύο ή περισσότερων συνδεδεμένων διεργασιών και μπορεί να επιτευχθεί χρησιμοποιώντας πρίζες. Μετά τη σύνδεση μεταξύ του διακομιστή και του πελάτη, δηλαδή τη διαδικασία του διακομιστή και τη διαδικασία του πελάτη, μπορούν να επικοινωνήσουν με σκοπό την ανταλλαγή δεδομένων χρησιμοποιώντας πρίζες.

Η υποδοχή είναι το τελικό σημείο μιας αμφίδρομης επικοινωνίας μεταξύ δύο διαδικασιών που εκτελούνται μέσω ενός δικτύου. Μπορείτε να αξιοποιήσετε τους χώρους ονομάτων System.Net και System.Net.Sockets για να εργαστείτε με πρίζες στο C #. Ενώ το πρώτο χρησιμοποιείται για λειτουργίες υψηλού επιπέδου χρησιμοποιώντας πρίζες, το δεύτερο χρησιμοποιείται για οποιεσδήποτε λειτουργίες χαμηλού επιπέδου όταν εργάζεστε με πρίζες.

Όταν εργάζεστε με πρίζες, μπορείτε να χρησιμοποιήσετε είτε τους μηχανισμούς επικοινωνίας είτε TCP / IP (Transmission Control Protocol / Internet Protocol) είτε UDP / IP (User Datagram Protocol / Internet Protocol). Για την ανταλλαγή δεδομένων μεταξύ δύο ή περισσότερων διαδικασιών μέσω δικτύου, μπορείτε να επωφεληθείτε από τα πρωτόκολλα μεταφοράς TCP και UDP. Ενώ το TCP (Transmission Control Protocol) είναι ένα ασφαλές και αξιόπιστο πρωτόκολλο προσανατολισμένο στη σύνδεση, το UDP (User Datagram Protocol) είναι ένα σχετικά λιγότερο ασφαλές ή αξιόπιστο, γρήγορο και χωρίς σύνδεση πρωτόκολλο.

Η ακόλουθη λίστα κωδικών δείχνει πώς μπορείτε να επωφεληθείτε από την κλάση System.Net.Dns για να εμφανίσετε τη διεύθυνση IP του συστήματός σας.

δημόσιο στατικό κενό Κεντρικό (string [] args)

        {

string hostName = Dns.GetHostName ();

δοκιμάστε

            {

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

foreach (διεύθυνση IPAddress στο ipAddress)

Console.WriteLine ("{0} / {1}", hostName, διεύθυνση);

            }

αλίευση (πρώην εξαίρεση)

            {

Console.WriteLine ("Παρουσιάστηκε σφάλμα:" + ex.Message);

            }

Κονσόλα. Διαβάστε ();

        }

Ανατρέξτε στην παραπάνω λίστα κωδικών. Ενώ η μέθοδος Dns.GetHostName () επιστρέφει το όνομα του συστήματος, η μέθοδος Dns.Resolve () χρησιμοποιείται για την ανάκτηση ενός πίνακα τύπου IPHostEntry.

Ανάκτηση πληροφοριών δικτύου

Ο χώρος ονομάτων System.Net.NetworkInformation μπορεί να χρησιμοποιηθεί για την ανάκτηση μεταδεδομένων δικτύου (δηλαδή, αλλαγές δικτύου, συμβάντα δικτύου, ιδιότητες κ.λπ.) στο C #. Για παράδειγμα, εάν θέλετε να ελέγξετε εάν υπάρχει διαθέσιμη σύνδεση δικτύου, μπορείτε να χρησιμοποιήσετε τη μέθοδο GetIsNetworkAvailable () όπως φαίνεται παρακάτω.

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

Δείτε πώς μπορείτε να καλέσετε αυτήν τη μέθοδο στον κωδικό σας.

Boolean networkAvailable = NetworkInterface.GetIsNetworkAvailable ();

Εάν θέλετε να παρακολουθήσετε τις αλλαγές στη διεύθυνση IP, μπορείτε να χρησιμοποιήσετε τα ακόλουθα συμβάντα της κλάσης NetworkChange.

System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityΑλλαγή

System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged

Για να ανακτήσετε τις πληροφορίες σχετικά με τις διεπαφές δικτύου, μπορείτε να χρησιμοποιήσετε τη μέθοδο GetAllNetworkInterfaces () της κλάσης NetworkInterface.

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

Αφού ανακτήσετε τη λίστα όλων των διεπαφών δικτύου, μπορείτε να χρησιμοποιήσετε το ακόλουθο κομμάτι κώδικα για να εμφανίσετε τις πληροφορίες κάθε μιας από τις διεπαφές δικτύου στην κονσόλα.

foreach (NetworkInterface networkInterface σε networkInterfaces)

            {

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

Console.WriteLine ("Όνομα δικτύου:" + networkInterface.Name);

Console.WriteLine ("Περιγραφή δικτύου \ n:" + networkInterface.Description);

            }

Ακολουθεί η πλήρης λίστα κωδικών για την αναφορά σας.

static void Main (συμβολοσειρά [] args)

        {

NetworkInterface [] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces ();

foreach (NetworkInterface networkInterface σε networkInterfaces)

            {

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

Console.WriteLine ("Όνομα δικτύου:" + networkInterface.Name);

Console.WriteLine ("Περιγραφή δικτύου \ n:" + networkInterface.Description);

            }

Κονσόλα. Διαβάστε ();

        }

Προγραμματισμός διακομιστή-πελάτη

Όταν εργάζεστε με προγραμματισμό δικτύου χρησιμοποιώντας TCP, συνήθως θα πρέπει να δημιουργήσετε μια διαδικασία διακομιστή που θα πρέπει να ξεκινά από μια συγκεκριμένη θύρα και επίσης μια διαδικασία πελάτη που μπορεί να ξεκινήσει σε οποιαδήποτε θύρα και να στείλει ένα αίτημα σύνδεσης στον διακομιστή. Η διαδικασία του διακομιστή μετά την εκκίνηση, ακούει εισερχόμενα αιτήματα σύνδεσης στη θύρα στην οποία έχει ξεκινήσει. Το ακόλουθο απόσπασμα κώδικα δείχνει πώς μπορείτε να επωφεληθείτε από την κλάση System.Net.Sockets.TcpListener και να το χρησιμοποιήσετε σε συνδυασμό με την τάξη υποδοχής.

TcpListener listener = νέο TcpListener (1234);

ακροατής. Έναρξη ();

Socket socket = ακροατής. AcceptSocket ();

Stream networkStream = νέο NetworkStream (υποδοχή);

Το παρακάτω απόσπασμα κώδικα απεικονίζει τον τρόπο με τον οποίο ο υπολογιστής-πελάτης υποδοχής μπορεί να συνδεθεί στον διακομιστή χρησιμοποιώντας το πρωτόκολλο TCP.

String ipAddress = "καθορίστε τη διεύθυνση ip εδώ";

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

System.Net.IPEndPoint remoteEndPoint = νέο IPEndPoint (ipAddress, 9000);

socketClient.Connect (remoteEndPoint);

Για να στείλετε δεδομένα στο διακομιστή από τον πελάτη, μπορείτε να χρησιμοποιήσετε το ακόλουθο απόσπασμα κώδικα.

δοκιμάστε

{

Κείμενο συμβολοσειράς = "Hello World!";

byte [] data = System.Text.Encoding.ASCII.GetBytes (κείμενο);

socketClient.Send (δεδομένα);

}

πιάσιμο (SocketException se)

{

// Γράψτε εδώ τον κωδικό χειρισμού εξαιρέσεων

}

Η μέθοδος Receive () της κλάσης socket μπορεί να χρησιμοποιηθεί για τη λήψη δεδομένων. Δείτε πώς μπορείτε να το χρησιμοποιήσετε για να ανακτήσετε δεδομένα από μια πρίζα. Σημειώστε ότι και οι δύο μέθοδοι αποστολής και λήψης αποκλείουν, δηλαδή, θα αποκλείσουν το νήμα που εκτελείται αυτήν τη στιγμή έως ότου σταλούν ή ληφθούν δεδομένα.

byte [] data = νέο byte [1024];

int i = socketClient.Receive (δεδομένα);

Λάβετε υπόψη ότι πρέπει να ενσωματώσετε τους χώρους ονομάτων System.Net και System.Net.Sockets στο πρόγραμμά σας για να εργαστείτε με πρίζες.

χρησιμοποιώντας το System.Net;

χρησιμοποιώντας το System.Net.Sockets;