Inhaltsverzeichnis
TCP/IP Connection
Heim Backend-Entwicklung PHP-Tutorial Erklären Sie in einfachen Worten: Das Prinzip der PHP-Socket-Kommunikation

Erklären Sie in einfachen Worten: Das Prinzip der PHP-Socket-Kommunikation

Feb 07, 2017 am 10:30 AM

Kennen Sie die Begriffe TCP/IP, UDP und Socket-Programmierung? Mit der Entwicklung der Netzwerktechnologie dringen diese Worte in unsere Ohren. Ich möchte also fragen:

1. Was sind TCP/IP und UDP?

2. Wo ist die Steckdose?

3. Was ist Socket?

4. Können Sie sie verwenden?

Was sind TCP/IP und UDP?

TCP/IP (Transmission Control Protocol/Internet Protocol) ist ein industrieller Standardprotokollsatz, der für Weitverkehrsnetze (WANs) entwickelt wurde.

UDP (User Data Protocol) ist ein Protokoll, das TCP entspricht. Es ist Mitglied der TCP/IP-Protokollsuite.

Hier ist ein Diagramm, das die Beziehung zwischen diesen Protokollen zeigt.

Erklären Sie in einfachen Worten: Das Prinzip der PHP-Socket-Kommunikation

Die TCP/IP-Protokollsuite umfasst die Transportschicht, die Netzwerkschicht und die Verbindungsschicht. Jetzt kennen Sie die Beziehung zwischen TCP/IP und UDP.

Wo ist die Steckdose?

In Abbildung 1 sehen wir den Schatten von Socket nicht. Wo ist er also? Lassen Sie uns Bilder verwenden, um klar zu sprechen.

Erklären Sie in einfachen Worten: Das Prinzip der PHP-Socket-Kommunikation

Es stellt sich heraus, dass der Sockel hier ist.

Was ist Socket?

Socket ist eine zwischengeschaltete Software-Abstraktionsschicht für die Kommunikation zwischen der Anwendungsschicht und der TCP/IP-Protokollsuite. Es handelt sich um eine Reihe von Schnittstellen. Im Entwurfsmodus ist Socket eigentlich ein Fassadenmodus, der die komplexe TCP/IP-Protokollfamilie hinter der Socket-Schnittstelle verbirgt. Für Benutzer ist alles eine Reihe einfacher Schnittstellen, die es Socket ermöglichen, Daten so zu organisieren, dass sie dem angegebenen Protokoll entsprechen.

Können Sie sie verwenden?

Vorgänger haben viel für uns getan und die Kommunikation zwischen Netzwerken ist viel einfacher geworden, aber schließlich gibt es noch viel zu tun. Als ich zuvor von Socket-Programmierung hörte, dachte ich, es handele sich um relativ fortgeschrittene Programmierkenntnisse, aber solange wir das Funktionsprinzip der Socket-Programmierung verstehen, wird das Rätsel gelöst sein.

Eine Szene aus dem Leben. Wenn Sie einen Freund anrufen möchten, wählen Sie zuerst die Nummer. Wenn der Freund den Klingelton hört, nimmt er den Hörer ab. Zu diesem Zeitpunkt sind Sie und Ihr Freund verbunden und Sie können sprechen. Wenn die Kommunikation beendet ist, legen Sie den Hörer auf, um das Gespräch zu beenden. Szenen aus dem Leben erklären, wie das funktioniert. Vielleicht wurde die TCP/IP-Protokollfamilie im Leben geboren, aber das ist nicht unbedingt der Fall.

Erklären Sie in einfachen Worten: Das Prinzip der PHP-Socket-Kommunikation

Beginnen wir mit der Serverseite. Der Server initialisiert zuerst den Socket, bindet dann an den Port, lauscht auf den Port, ruft „Accept“ zum „Blockieren“ auf und wartet darauf, dass der Client eine Verbindung herstellt. Wenn zu diesem Zeitpunkt ein Client einen Socket initialisiert und dann eine Verbindung zum Server herstellt (verbinden), wird bei erfolgreicher Verbindung die Verbindung zwischen dem Client und dem Server hergestellt. Der Client sendet eine Datenanforderung, der Server empfängt die Anforderung und verarbeitet sie, sendet dann die Antwortdaten an den Client, der Client liest die Daten und schließt schließlich die Verbindung und die Interaktion endet.

Sockelbezogene Funktionen:

--------------------------------------------- --- -------------------------------- --- -------------

socket_accept() akzeptiert eine Socket-Verbindung

socket_bind() bindet den Socket an eine IP-Adresse und einen Port

socket_clear_error() Löschen Sie den Socket-Fehler oder den letzten Fehlercode

socket_close() Schließen Sie eine Socket-Ressource

socket_connect() Starten Sie eine Socket-Verbindung

socket_create_listen () Öffnet einen Socket, der den angegebenen Port überwacht

socket_create_pair() Erzeugt ein Paar undifferenzierter Sockets in einem Array

socket_create() Erzeugt einen Socket, was dem Generieren von Socket-Daten entspricht Struktur

socket_get_option() Ruft die Socket-Option ab

socket_getpeername() Ruft die IP-Adresse eines entfernten ähnlichen Hosts ab

socket_getsockname() Ruft die IP-Adresse des lokalen Sockets ab

socket_iovec_add () Einen neuen Vektor zu einem Scatter-/Aggregate-Array hinzufügen

socket_iovec_alloc() Diese Funktion erstellt eine iovec-Datenstruktur, die senden, empfangen, lesen und schreiben kann

socket_iovec_delete () Einen bereits zugewiesenen Iovec löschen

socket_iovec_fetch() gibt die Daten der angegebenen Iovec-Ressource zurück

socket_iovec_free() gibt eine Iovec-Ressource frei

socket_iovec_set() legt den neuen Wert fest von iovec-Daten

socket_last_error() Den letzten Fehlercode des aktuellen Sockets abrufen

socket_listen() Alle Verbindungen vom angegebenen Socket abhören

socket_read() Die Daten lesen der angegebenen Länge

socket_readv( ) Liest die Daten aus dem verstreuten/aggregierten Array

socket_recv() Beendet die Daten vom Socket zum Cache

socket_recvfrom() Akzeptieren die Daten vom angegebenen Socket, wenn nicht angegeben, wird der aktuelle Socket als Standard verwendet

socket_recvmsg() empfängt Nachrichten von iovec

socket_select() Mehrfachauswahl

socket_send() Diese Funktion sendet Daten an den verbundenen Socket

socket_sendmsg() sendet eine Nachricht an den Socket

socket_sendto() sendet eine Nachricht an den Socket der angegebenen Adresse

socket_set_block() Setzt den Socket auf Blockmodus

socket_set_nonblock() Setzt den Socket auf Nichtblockmodus

socket_set_option() Setzt die Socket-Option

socket_shutdown () Mit dieser Funktion können Sie den angegebenen Socket lesen, schreiben oder schließen

socket_strerror() gibt den detaillierten Fehler mit der angegebenen Fehlernummer zurück

socket_write() schreibt Daten in den Socket-Cache

socket_writev() schreibt Daten in das Scatter/Aggregate-Array

Fall 1: Demonstration der Socket-Kommunikation

Serverseite:

<?php
//确保在连接客户端时不会超时
set_time_limit(0);
 
$ip = &#39;127.0.0.1&#39;;
$port = 1935;
 
/*
 +-------------------------------
 *  @socket通信整个过程
 +-------------------------------
 *  @socket_create
 *  @socket_bind
 *  @socket_listen
 *  @socket_accept
 *  @socket_read
 *  @socket_write
 *  @socket_close
 +--------------------------------
 */
 
/*----------------  以下操作都是手册上的  -------------------*/
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
  echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
}
 
if(($ret = socket_bind($sock,$ip,$port)) < 0) {
  echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
}
 
if(($ret = socket_listen($sock,4)) < 0) {
  echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
}
 
$count = 0;
 
do {
  if (($msgsock = socket_accept($sock)) < 0) {
    echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
    break;
  } else {
     
    //发到客户端
    $msg ="测试成功!\n";
    socket_write($msgsock, $msg, strlen($msg));
     
    echo "测试成功了啊\n";
    $buf = socket_read($msgsock,8192);
     
     
    $talkback = "收到的信息:$buf\n";
    echo $talkback;
     
    if(++$count >= 5){
      break;
    };
     
   
  }
  //echo $buf;
  socket_close($msgsock);
 
} while (true);
 
socket_close($sock);
?>
Nach dem Login kopieren

Dies ist die Serverseite Code des Sockets. Führen Sie dann cmd aus und achten Sie auf den Speicherpfad Ihres eigenen Programms.

Erklären Sie in einfachen Worten: Das Prinzip der PHP-Socket-Kommunikation

Keine Antwort. Das Serverprogramm wurde gestartet und der Port hat mit dem Abhören begonnen. Führen Sie netstat -ano aus, um den Portstatus zu überprüfen.

Sehen Sie, der Port befindet sich bereits im LISTENING-Status. Als nächstes müssen wir nur noch das Client-Programm ausführen, um eine Verbindung herzustellen. Laden Sie den Code hoch

<?php
error_reporting(E_ALL);
set_time_limit(0);
echo "<h2 id="TCP-IP-nbsp-Connection">TCP/IP Connection</h2>\n";
 
$port = 1935;
$ip = "127.0.0.1";
 
/*
 +-------------------------------
 *  @socket连接整个过程
 +-------------------------------
 *  @socket_create
 *  @socket_connect
 *  @socket_write
 *  @socket_read
 *  @socket_close
 +--------------------------------
 */
 
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
  echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
}else {
  echo "OK.\n";
}
 
echo "试图连接 &#39;$ip&#39; 端口 &#39;$port&#39;...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) {
  echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}else {
  echo "连接OK\n";
}
 
$in = "Ho\r\n";
$in .= "first blood\r\n";
$out = &#39;&#39;;
 
if(!socket_write($socket, $in, strlen($in))) {
  echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
}else {
  echo "发送到服务器信息成功!\n";
  echo "发送的内容为:<font color=&#39;red&#39;>$in</font> <br>";
}
 
while($out = socket_read($socket, 8192)) {
  echo "接收服务器回传信息成功!\n";
  echo "接受的内容为:",$out;
}
 
 
echo "关闭SOCKET...\n";
socket_close($socket);
echo "关闭OK\n";
?>
Nach dem Login kopieren

Erklären Sie in einfachen Worten: Das Prinzip der PHP-Socket-Kommunikation

Erklären Sie in einfachen Worten: Das Prinzip der PHP-Socket-Kommunikation

Jetzt hat sich der Client mit dem Server verbunden.

Fall 2: Detaillierte Codeerklärung

// 设置一些基本的变量
$host = "192.168.1.99";
$port = 1234;
// 设置超时时间
set_time_limit(0);
// 创建一个Socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not createsocket\n");
//绑定Socket到端口
$result = socket_bind($socket, $host, $port) or die("Could not bind tosocket\n");
// 开始监听链接
$result = socket_listen($socket, 3) or die("Could not set up socketlistener\n");
// accept incoming connections
// 另一个Socket来处理通信
$spawn = socket_accept($socket) or die("Could not accept incomingconnection\n");
// 获得客户端的输入
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// 清空输入字符串
$input = trim($input);
//处理客户端输入并返回结果
$output = strrev($input) . "\n";
socket_write($spawn, $output, strlen ($output)) or die("Could not write
output\n");
// 关闭sockets
socket_close($spawn);
socket_close($socket);
Nach dem Login kopieren

Im Folgenden finden Sie eine detaillierte Beschreibung jedes Schritts:

1. Der erste Schritt besteht darin, zwei Variablen zum Speichern zu erstellen Socket-Betrieb Die IP-Adresse und der Port des Servers können auf Ihren eigenen Server und Port eingestellt werden (dieser Port kann eine Zahl zwischen 1 und 65535 sein), sofern dieser Port nicht verwendet wird 🎜>

// 设置两个变量
$host = "192.168.1.99";
$port = 1234;
Nach dem Login kopieren
2. Sie können die Funktion set_time_out() auf der Serverseite verwenden, um sicherzustellen, dass PHP beim Warten auf die Verbindung des Clients nicht abläuft.

// 超时时间
set_time_limit(0);
Nach dem Login kopieren
3. Auf der Grundlage des vorherigen ist es nun an der Zeit, einen Socket mit der Funktion socket_creat() zu erstellen – diese Funktion gibt ein Socket-Handle zurück, das in allen nachfolgenden Funktionen verwendet wird >

Der erste Parameter „AF_INET“ wird verwendet, um den Domänennamen anzugeben;

// 创建Socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create
socket\n");
Nach dem Login kopieren
Der zweite Parameter „SOCK_STREM“ teilt der Funktion mit, welcher Socket-Typ erstellt wird (in (in diesem Beispiel TCP-Typ)

Wenn Sie also einen UDP-Socket erstellen möchten, können Sie den folgenden Code verwenden:


4 Wenn das Handle erstellt wird, besteht der nächste Schritt darin, es anzugeben oder an die angegebene Adresse und den Port zu binden. Dies kann über die Funktion socket_bind() erfolgen erstellt und an einen Port gebunden ist, können Sie mit dem Abhören beginnen. Mit der Funktion socket_listen() können Sie mit PHP eine Abhörfunktion starten und eine Zahl angeben (in diesem Fall den zweiten Parameter: 3)

// 创建 socket
$socket = socket_create(AF_INET, SOCK_DGRAM, 0) or die("Could not create
socket\n");
Nach dem Login kopieren

< 6. Bisher hat Ihr Server im Grunde nichts getan, außer auf eine Verbindungsanfrage vom Client zu warten. Sobald eine Client-Verbindung empfangen wird, kommt die Funktion socket_accept() ins Spiel empfängt die Verbindungsanfrage und ruft einen weiteren Sub-Socket auf, um die Client-Server-Kommunikation abzuwickeln.

// 绑定 socket to 指定地址和端口
$result = socket_bind($socket, $host, $port) or die("Could not bind to
socket\n");
Nach dem Login kopieren

Dieser Sub-Socket kann nun für die nachfolgende Client-Server-Kommunikation verwendet werden.

7. Wenn eine Verbindung hergestellt ist, wartet der Server darauf, dass der Client einige Eingabeinformationen sendet. Diese Informationen können mit der Funktion socket_read() abgerufen und der Variablen $input

<🎜 zugewiesen werden >
// 开始监听连接
$result = socket_listen($socket, 3) or die("Could not set up socket
listener\n");
Nach dem Login kopieren

Der zweite Parameter von socker_read wird verwendet, um die Anzahl der zu lesenden Bytes anzugeben. Sie können ihn verwenden, um die Größe der vom Client erhaltenen Daten zu begrenzen.

Hinweis: socket_read-Funktion Shell-Client-Daten werden gelesen, bis n, t oder
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium) 11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium) Mar 03, 2025 am 10:49 AM

Lange URLs, die oft mit Schlüsselwörtern und Tracking -Parametern überfüllt sind, können Besucher abschrecken. Ein URL -Verkürzungsskript bietet eine Lösung, die präzise Links erstellt, die ideal für soziale Medien und andere Plattformen sind. Diese Skripte sind für einzelne Websites a wertvoll

Arbeiten mit Flash -Sitzungsdaten in Laravel Arbeiten mit Flash -Sitzungsdaten in Laravel Mar 12, 2025 pm 05:08 PM

Laravel vereinfacht die Behandlung von temporären Sitzungsdaten mithilfe seiner intuitiven Flash -Methoden. Dies ist perfekt zum Anzeigen von kurzen Nachrichten, Warnungen oder Benachrichtigungen in Ihrer Anwendung. Die Daten bestehen nur für die nachfolgende Anfrage standardmäßig: $ Anfrage-

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Mar 12, 2025 pm 05:09 PM

Laravel bietet eine kurze HTTP -Antwortsimulationssyntax und vereinfache HTTP -Interaktionstests. Dieser Ansatz reduziert die Code -Redundanz erheblich, während Ihre Testsimulation intuitiver wird. Die grundlegende Implementierung bietet eine Vielzahl von Verknüpfungen zum Antworttyp: Verwenden Sie Illuminate \ Support \ facades \ http; Http :: fake ([ 'Google.com' => 'Hallo Welt',, 'github.com' => ['foo' => 'bar'], 'Forge.laravel.com' =>

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Mar 04, 2025 am 09:33 AM

Dies ist der zweite und letzte Teil der Serie zum Aufbau einer Reaktionsanwendung mit einem Laravel-Back-End. Im ersten Teil der Serie haben wir eine erholsame API erstellt, die Laravel für eine grundlegende Produktlistenanwendung unter Verwendung von Laravel erstellt hat. In diesem Tutorial werden wir Dev sein

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Mar 14, 2025 am 11:42 AM

Die PHP Client -URL -Erweiterung (CURL) ist ein leistungsstarkes Tool für Entwickler, das eine nahtlose Interaktion mit Remote -Servern und REST -APIs ermöglicht. Durch die Nutzung von Libcurl, einer angesehenen Bibliothek mit Multi-Protokoll-Dateien, erleichtert PHP Curl effiziente Execu

12 Beste PHP -Chat -Skripte auf Codecanyon 12 Beste PHP -Chat -Skripte auf Codecanyon Mar 13, 2025 pm 12:08 PM

Möchten Sie den dringlichsten Problemen Ihrer Kunden in Echtzeit und Sofortlösungen anbieten? Mit Live-Chat können Sie Echtzeitgespräche mit Kunden führen und ihre Probleme sofort lösen. Sie ermöglichen es Ihnen, Ihrem Brauch einen schnelleren Service zu bieten

Ankündigung von 2025 PHP Situation Survey Ankündigung von 2025 PHP Situation Survey Mar 03, 2025 pm 04:20 PM

Die 2025 PHP Landscape Survey untersucht die aktuellen PHP -Entwicklungstrends. Es untersucht Framework -Nutzung, Bereitstellungsmethoden und Herausforderungen, die darauf abzielen, Entwicklern und Unternehmen Einblicke zu geben. Die Umfrage erwartet das Wachstum der modernen PHP -Versio

Benachrichtigungen in Laravel Benachrichtigungen in Laravel Mar 04, 2025 am 09:22 AM

In diesem Artikel werden wir das Benachrichtigungssystem im Laravel -Web -Framework untersuchen. Mit dem Benachrichtigungssystem in Laravel können Sie Benachrichtigungen an Benutzer über verschiedene Kanäle senden. Heute werden wir diskutieren, wie Sie Benachrichtigungen OV senden können

See all articles