Die Struktur der Sockaddr_in

Die Struktur der Sockaddr_in

Die Socket -Programmierung in der C -Sprache verwendet eine Vielzahl von Funktionen. Viele davon werden verwendet, um die Adresse des Servers zu lösen, zu konvertieren und zu bestimmen, mit dem wir eine Verbindung herstellen möchten. Zweifellos ist die IP -Adresse die wichtigste Informationen, die wir beim Öffnen einer Sockel benötigen. Um mit diesen Adressen umzugehen, müssen wir die Strukturen kennen, in denen sie gespeichert werden, die Art der Daten der einzelnen Mitglieder usw.

In diesem Linux -Hinweis -Artikel, Sie werden alles über die Art von lernen SOCADDR_IN Strukturen, die von Systemfunktionen verwendet werden, um Adressen für Internetverbindungen zu speichern.

Wir werden eine theoretische Beschreibung seiner Mitglieder und die Art der Daten für jeden von ihnen sehen. Wir werden lernen, wie man ein erstellt SOCKADDR_IN Struktur und dann die Adressen in diesem Strukturart abrufen, konvertieren und speichern, um eine erfolgreiche Socket -Verbindung herzustellen.

Wir werden auch die Ähnlichkeiten mit der SockadDR -Struktur erläutern und wie Daten von einem zum anderen konvertiert werden, da dies ein notwendiger Schritt ist, um die Funktion Connect () zu verwenden und eine Verbindung zum Server herzustellen.

Syntax der Sockaddr_in -Struktur in der C -Sprache

struct sockaddr_in
Kurzes Sin_family;
vorzeichenloses kurzes Sin_port;
struktur in_addr sin_addr;
char sin_zero [8];
;

Beschreibung der Sockaddr_in -Struktur in der C -Sprache

Strukturen des Typs SOCKADDR_IN sollen die Adresse des Servers in Internetverbindungen speichern und in Größe und Datenreihenfolge mit einer von der Funktion Connect () verwendeten Sockaddr -Struktur kompatibel sein, um eine Verbindung zu einem Server herzustellen.

Die in diesen Strukturen gespeicherten Daten geben die Adressfamilie, die Portnummer und die IP -Adresse des Servers an. Als nächstes sehen wir die Liste der Mitglieder der SOCKADDR_IN Struktur und eine Beschreibung jedes Mitglieds:

Sin_family: Dies ist ein kurzer, der die Art der Adressfamilie angibt, die die Struktur enthält. Diese Optionen der Adressfamilie sind wie folgt:

Af_inet: Gibt die IPv4 -Adressfamilie an.

AF_INET6: Gibt die IPv6 -Adressfamilie an.

SIN_PORT: es ist ein Ushort Dies gibt die Portnummer an, die der Sockel verwendet wird. Wie Adressen wird die Portnummer nicht codiert, was bedeutet, dass sie im direkten Binärformat angegeben werden muss, sodass eine Konvertierung zu diesem Datentyp durchgeführt werden muss.

IN_ADD: Dies ist eine Struktur, deren Mitglied a ist uint32_t wobei jedes seiner 4 Bytes einem Feld der IPv4 -Adresse des Internetservers entspricht, mit dem der Sockel geöffnet werden soll. Wie die Portnummer muss die Adresse in dieser Struktur im reinen Binärformat angegeben werden.

sin_zero: Dies ist ein 8-Charakter-Array, dessen einziger Zweck darin besteht, die Größe der Struktur mit einer Typstruktur auszugleichen Sockaddr.

So deklarieren Sie eine Sockaddr_in -Struktur in der C -Sprache

A SOCKADDR_IN Struktur, in einer Codezeile schreiben “Struktur”Gefolgt von dem Typ. In diesem Fall, SOCKADDR_IN und dann das "Strukturname" oder "* StrukturnameUm den Zeiger zu erklären. Die Syntax für die Erklärung a SOCKADDR_IN Die Struktur ist wie folgt:

struct sockaddr_in *my_struct;

So setzen Sie die Portnummer in einer Sockaddr_in -Struktur in der C -Sprache

Die Portnummer muss in direkter binärer Form im SIN_PORT -Mitglied der Struktur angegeben werden. Daher ist es notwendig, den Wert in diesen Datentyp umzuwandeln.

Der htons () Die Funktion wird am häufigsten für diesen Zweck verwendet. Es wandelt den in seinem Eingabeargument enthaltenen Ganzzahlwert um und gibt seinen Wert im direkten Binärformat in seine Ausgabe zurück.

Lassen Sie uns als nächstes sehen, wie der Port 80 dem zugewiesen werden kann sin_port Mitglied der zuvor deklarierten Struktur:

int port = 80;
my_struct.sin_port = htons (port);

So setzen Sie die IP -Adresse in einer Sockaddr_in -Struktur in der C -Sprache

IP -Adressen werden nicht codiert, was bedeutet, dass jede der Zahlen in ihren Feldern durch sein binäres Äquivalent dargestellt wird. Um mit ihnen zu arbeiten, müssen in bestimmten Fällen IP -Adressen in Zeichenfolgen oder Zeichenfolgen in IP -Adressen umwandeln, um diese Werte in den Strukturen zuzuweisen oder abzufragen.

Die C -Sprache bietet mehrere Funktionen, um Strings in Adressen umzuwandeln und das Ergebnis in bestimmten Strukturen zu speichern.

Der Funktion inet_pton () ist einer der am häufigsten verwendeten für diesen Zweck. Es ist im Kopfball definiert “inet.HUnd hat drei Eingabeargumente. Der erste muss die zu konvertierende Adressfamilie angeben, in diesem Fall AF _inet.

Das zweite Argument muss der Zeiger auf eine Zeichenfolge sein, die die IP -Adresse angibt, wobei jedes Feld durch einen Zeitraum getrennt ist.

Das dritte Argument dieser Funktion muss der Zeiger auf eine Struktur des Typs sein SOCKADDR_IN wo die konvertierte Adresse gespeichert ist.

Der inet_ntop () Die Funktion führt die umgekehrte Aufgabe durch und konvertiert die in a gespeicherten Adressen SOCKADDR_IN Struktur in Saiten.

Als nächstes werden wir sehen, wie Sie der My_Struct -Struktur des SOCKADDR_IN Geben Sie in diesem Fall ADDR aus einer Zeichenfolge ein, verwenden Sie die inet_pton () Funktion. Dann benutzen wir die inet_ntop () Funktion zum Umwandeln der Adresse in die String -IP, um sie in der Befehlskonsole mit anzuzeigen printf ().

#enthalten
#enthalten
#enthalten
#enthalten
void main ()

char ip [inet_addrstrlen] = "";
char addr [200] = "192.168.1.1 ";
struct sockaddr_in *my_struct;
// Konvertiert die Zeichenfolge in die Adresse.
inet_pton (af_inet, adDr & my_struct);
// Die Adresse in String konvertiert.
inet_ntop (af_inet & my_struct, ip, inet_addrstrlen);
printf ("\ n \ nip Adresse: %s \ n \ n", ip);

Das folgende Bild zeigt die IP -Adresse, die wir aus der Zeichenfolge erhalten haben ADDR. Dann kehrten wir mit der komplementären Funktion zurück inet_ntop () Um die in gespeicherte Adresse zu konvertieren, my_struct in eine Zeichenfolge, um sie in der Befehlskonsole anzuzeigen.

So bestimmen Sie die IP -Adresse einer Domäne und speichern Sie sie in einer Sockaddr_in -Struktur in der C -Sprache

Um eine Verbindung zu einem Host herzustellen, müssen Sie zunächst seine Adresse kennen. Lassen Sie uns als nächstes sehen, wie Sie die IP -Adresse eines Hosts erhalten und sie in a speichern SOCKADDR_IN Struktur durch Verwendung der GethostbyName () Funktion.

Diese Funktion nimmt als einziges Eingabargument ein String oder einen Zeiger auf, der den Hostnamen angibt, dessen Adresse bestimmt werden soll. Infolge, GethostbyName () Gibt eine Struktur vom Typ mit allen Domänendaten, einschließlich der IP -Adresse, zurück.

Sobald die Hostinformationen in der hostenten Struktur abgerufen sind, wird die erhaltene Adresse in die kopiert SOCKADDR_IN Struktur mit dem bcopy () Funktion.

Als nächstes sehen wir den Code, in dem der SOCADDR_IN und häusliche Typstrukturen werden definiert. Der IP Adresse von "www.Google.comWird in der letzten Struktur bestimmt und in die kopiert SOCKADDR_IN Struktur. Anschließend wird die bestimmte Adresse in eine Zeichenfolge konvertiert, wobei die inet_ntoa () und printf () Funktionen und in der Befehlskonsole angezeigt:

#enthalten
#enthalten
#enthalten
#enthalten
#enthalten
int main ()
struct sockaddr_in my_struct;
struct hostent *host_ent;
Host_ent = GetHostByName ("www.Google.com ");
bcopy ((char *) host_ent-> h_addr, (char *) & my_struct.SIN_ADDR.S_ADDR,
sizeof (host_ent-> h_length));
printf ("IP -Adresse: %s \ n", inet_ntoa (my_struct.sin_addr));

Auf diese Weise haben wir die Adresse von bereits gespeichert “www.Google.com”In der Struktur des Typs SOCKADDR_IN. Die folgende Abbildung zeigt die Adresse des Host GethostbyName () Funktion.

Google.COM hat mehrere IP -Adressen, die der Domäne zugeordnet sind, daher kann das Ergebnis dieses Codes vom Ergebnis des Bildes abweichen.

Wie man eine Sockaddr -Struktur mit den Daten aus einer Sockaddr_in -Struktur wirft

Der verbinden() Die Funktion ist die einzige Funktion, die von der C -Sprache zur Herstellung von Socket -Verbindungen bereitgestellt wird. Diese Funktion verwendet Strukturen vom Typ Sockaddr Um die Adresse anzugeben, mit der sie eine Verbindung herstellen möchte.

Die von der verwendete Struktur verbinden() Die Funktion hat die gleiche Größe in Bytes wie eine Struktur des Typs SOCKADDR_IN unterscheidet sich jedoch im Datentyp. Dies bedeutet, dass eine Struktur gießen muss durchgeführt werden, um die in der gespeicherten Verbindungsdaten zu verwenden SOCKADDR_IN Struktur in dieser Funktion.

Diese einfache Operation kann mit demselben Aufruf an die durchgeführt werden Connect () Funktion Im zweiten Eingangsargument, wie unten gezeigt:

Connect (Socket, (struct sockaddr *) & my_struct, sizeof (my_struct));

Abschluss

In diesem Linux -Hinweis -Artikel, Wir haben alles erklärt, was Sie über die Arbeit mit Strukturen des Typs wissen müssen SOCKADDR_IN. Wir haben uns nach dem Typ und den Daten in den Mitgliedern ausführlich angesehen.

Wir haben Ihnen auch gezeigt, wie Sie diese Art von Struktur deklarieren und wie Sie die erforderlichen Funktionen verwenden, um die verschiedenen Daten zu erhalten, umzuwandeln und zu manipulieren, die von jedem seiner Mitglieder gespeichert sind.

Weitere Artikel über die C -Sprache und Linux -Tipps finden Sie die Suchmaschine auf unserer Website.