Bei der Netzwerkprogrammierung muss die Datenübertragung dem Protokollformat strikt befolgen, um sicherzustellen, dass die Sendungs- und Empfangsenden die Daten korrekt analysieren können. Die Funktion pack () in PHP kann uns helfen, Daten im angegebenen Format in binäre Zeichenfolgen zu packen, während Socket_Sendto () verwendet wird, um Daten über das UDP -Protokoll an angegebene Adressen zu senden. In diesem Artikel wird erläutert, wie diese beiden Funktionen in Kombination verwendet werden, um die Verpackung und das Senden von Daten zu realisieren.
Die Funktion pack () wandelt PHP -Variablen basierend auf dem angegebenen Formatcode in binäre Zeichenfolgen um. Zum Beispiel:
$data = pack("Nn", 12345, 80);
Hier "nn" bedeutet:
N : Unsigned Long Ganzzahl (32-Bit, Netzwerk Endiangness, d. H. Big Endiangness)
N : Unsigned Short Integer (16-Bit, Network Endian)
Package Ganzzahlen 12345 und 80 in eine binäre Zeichenfolge für eine einfache Übertragung über das Netzwerk.
Socket_SendTO () wird hauptsächlich für UDP zum Senden von Daten verwendet, und die Funktionssignatur lautet wie folgt:
int socket_sendto(resource $socket, string $buf, int $len, int $flags, string $addr, int $port)
$ Socket : Socket -Ressource erstellt über Socket_Create ()
$ BUF : Die zugesandten Daten
$ len : Länge der gesendeten Daten
$ flags : Flagge, normalerweise auf 0 gesetzt
$ addr : Ziel -IP -Adresse
$ port : Zielport
Angenommen, wir müssen ein Paket mit "Nachrichten-ID" und "Statuscode" senden, die Nachrichten-ID wird als 4-Byte-Ganzzahl verwendet, und der Statuscode wird als 2-Byte-Ganzzahl verwendet.
<?php
// erstellen UDP Socket
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($socket === false) {
die("socket_create() failed: " . socket_strerror(socket_last_error()));
}
// Daten vorbereiten:InformationIDund Statuscode
$messageId = 1001; // 4 Byte Ganzzahl
$statusCode = 200; // 2 Byte Ganzzahl
// verwenden pack() Funktionsverpackungsdaten,Netzwerk -Byte -Bestellung(Big Endian)
$data = pack("Nn", $messageId, $statusCode);
// Zieladresse und Port
$ip = "m66.net";
$port = 12345;
// Daten senden
$sent = socket_sendto($socket, $data, strlen($data), 0, $ip, $port);
if ($sent === false) {
echo "socket_sendto() failed: " . socket_strerror(socket_last_error($socket));
} else {
echo "Erfolgreich gesendet {$sent} Byte -Daten an {$ip}:{$port}\n";
}
// Schließung socket
socket_close($socket);
?>
Durch die Funktion pack () können wir verschiedene Arten von Daten flexibel in Binärformate codieren, die den Anforderungen von Netzwerkprotokollen entsprechen. In Kombination mit Socket_SendTO () können die verpackten Daten über das UDP -Protokoll an den angegebenen Server gesendet werden, um eine effiziente Netzwerkkommunikation zu erreichen.