Schauen wir uns zunächst die grundlegende Syntax der Funktion Stream_Socket_Shutdown an:
bool stream_socket_shutdown ( resource $stream , int $how )
$ stream : Ist eine Socket -Ressource, die durch Funktionen wie Stream_Socket_Client oder Stream_Socket_Server geöffnet wurde.
$ Wie : Ist der Weg, um den Betrieb zu schließen. Eine der folgenden Konstanten kann verwendet werden:
Stream_Shut_RDWR : Lesen und schreiben gleichzeitig Vorgänge.
Stream_shut_rd : Schließen Sie den Lesevorgang.
Stream_Shut_Wr : Schließen Sie die Schreiboperation.
Das TCP-Protokoll ist verbindungsorientiert, was bedeutet, dass die Verbindung vor der Kommunikation hergestellt werden muss und die Verbindung nach Abschluss der Kommunikation anmutig geschlossen werden muss. Die Rolle der Funktion von Stream_Socket_Shutdown in TCP -Verbindungen ist besonders wichtig, insbesondere nach der Durchführung von Datenübertragungen müssen wir sicherstellen, dass die Verbindung korrekt geschlossen ist, um Ressourcenleckage zu vermeiden.
Verwenden Sie Stream_Socket_Client oder Stream_Socket_Server, um eine Verbindung herzustellen.
Verwenden Sie nach Abschluss der Datenübertragung stream_socket_shutdown ($ stream, stream_shut_wr), um den Schreibvorgang zu schließen (mit dem Remote -Host, dass ich keine Daten mehr senden werde).
Warten Sie dann, bis der Remote -Host die Datenübertragung abschließt und die Verbindung schließt, normalerweise mit Stream_Socket_Shutdown ($ stream, stream_shut_rd) , um den Lesevorgang zu schließen.
Ein typisches Beispiel für TCP -Verbindungen:
$stream = stream_socket_client("tcp://m66.net:80", $errno, $errstr);
if (!$stream) {
echo "Error: $errno - $errstr\n";
} else {
fwrite($stream, "GET / HTTP/1.1\r\nHost: m66.net\r\nConnection: close\r\n\r\n");
// Schließen Sie den Schreibvorgang,Gibt an, dass Daten nicht mehr gesendet werden
stream_socket_shutdown($stream, STREAM_SHUT_WR);
// Lesen Sie die Antwort
while ($response = fgets($stream)) {
echo $response;
}
// Schließen Sie den Lesevorgang,Schließen Sie die Verbindung
stream_socket_shutdown($stream, STREAM_SHUT_RD);
fclose($stream);
}
Im TCP -Protokoll können Sie im Stream_Socket_Shutdown die Lesen und Schreiben von Vorgängen separat ausschalten, was für Szenarien sehr nützlich ist, in denen Verbindungen anmutig geschlossen werden müssen.
Bei der Verwendung von Stream_Shut_WR erhält der Remote -Host normalerweise ein "Verbindungs -Shutdown" -Signal, das auch die Verbindung und die freien Ressourcen abschließt.
Im Gegensatz zum TCP -Protokoll ist UDP ein verbindungsloses Protokoll, sodass keine anhaltende Verbindung im UDP -Protokoll hergestellt wird, und es muss auch nicht die Verbindung so elegant wie TCP schließen. stream_socket_shutdown spielt eine begrenzte Rolle im UDP -Protokoll, da UDP keine Steuerung von Datenflüssen oder Verbindungsverbindungen beinhaltet.
Verwenden Sie Stream_Socket_Client oder Stream_Socket_Server , um einen UDP -Socket zu erstellen.
Nach dem Versenden eines Pakets müssen nicht explizit stream_socket_shutdown aufgerufen werden, um die Lektüre und Schreibvorgänge zu schließen, da die UDP -Kommunikation nicht über das Konzept der "Verbindung" verfügt.
Ein typisches Beispiel für das Senden von UDP -Daten:
$stream = stream_socket_client("udp://m66.net:12345", $errno, $errstr);
if (!$stream) {
echo "Error: $errno - $errstr\n";
} else {
fwrite($stream, "Hello, UDP server!");
fclose($stream);
}
Im UDP -Protokoll muss die Funktion stream_socket_shutdown normalerweise nicht aufgerufen werden. Auch wenn es aufgerufen wird, wirkt sich das Verhalten nicht wie TCP aus, da das UDP -Protokoll selbst kein klares Konzept der Verbindung hat.
In UDP -Anwendungsszenarien ändert die Verwendung der Funktion stream_socket_shutdown daher das Verhalten der Datenübertragung nicht wesentlich.
Es gibt offensichtliche Unterschiede in der Anwendung der Funktion Stream_Socket_Shutdown in TCP- und UDP -Protokollen. Für das TCP -Protokoll hilft es, Verbindungen anmutig zu schließen, sicherzustellen, dass die Datenübertragung vollständig ist und die Ressourcen auffreut. Im UDP -Protokoll ist die Rolle von stream_socket_shutdown aufgrund seiner verbindungslosen Natur weniger wichtig und muss normalerweise nicht verwendet werden.
Wenn Entwickler stream_socket_shutdown verwenden, sollten sie die entsprechende Abschaltmethode basierend auf dem verwendeten Protokolltyp auswählen. Im TCP -Protokoll kann die rationale Verwendung von stream_shut_wr und stream_shut_rd die korrekte Abschaltung der Verbindung und die rechtzeitige Freigabe von Ressourcen sicherstellen. Während im UDP -Protokoll ist diese Funktion normalerweise nicht erforderlich.