


Die PHP+Socket-Serie realisiert die Datenübertragung zwischen Client und Server
Dieser Artikel vermittelt Ihnen relevantes Wissen über PHP+Socket. Er stellt hauptsächlich vor, was Socket ist. Wie realisiert PHP+Socket die Client-Server-Datenübertragung? Freunde, die interessiert sind, können einen Blick darauf werfen. Ich hoffe, es wird für alle hilfreich sein.
Socket-Einführung
realisiert die Kommunikation zwischen Netzwerkprozessen. Sockets sind die Zwischenabstraktionsschicht für die Kommunikation zwischen der Anwendungsschicht und der TCP/IP-Protokollfamilie. 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 dem Socket ermöglichen, die Daten so zu organisieren, dass sie den angegebenen Anforderungen entsprechen ursprüngliche englische Bedeutung des Protokolls
socket ist „Loch“ oder „Socket“. Es wird auch zur Beschreibung von IP-Adressen und Ports verwendet. Es ist ein Handle für eine Kommunikationskette Wird verwendet, um unterschiedliche Kommunikation zwischen virtuellen Maschinen oder verschiedenen Computern zu implementieren.
Drei Prozesse der Socket-Verknüpfung
Serverüberwachung: IP + Portnummer
Client-Anfrage: Stellen Sie eine Verbindungsanforderung an die IP und den Port des Servers
Link-Bestätigung: Server-Socket-Überwachung Beim Empfang oder Empfang einer Bei der Client-Socket-Verbindungsanfrage erstellt er einen neuen Prozess und sendet als Antwort auf die Client-Anfrage die Socket-Beschreibung des Servers. Sobald der Client diese Beschreibung bestätigt, ist die Verbindung hergestellt. Der Socket des Servers befindet sich weiterhin im Überwachungsstatus und akzeptiert weiterhin Verbindungsanfragen von anderen Client-Sockets.
php implementiert Sockets
Wenn Sie Sockets in PHP verwenden müssen, müssen Sie beim Kompilieren von PHP das Konfigurationselement --enable-sockets
hinzufügen, um es zu aktivieren php -m|grep sockets
Befehl zum Überprüfen des Aktivierungsstatus. Informationen zum spezifischen Kompilierungsprozess finden Sie unter Dieser Artikel--enable-sockets
配置项来启用,可使用 php -m|grep sockets
命令检查启用情况,具体编译过程可参考 这篇文章
快速体验
服务端与客户端简略代码如下,运行后服务端会阻塞等待客户端连接,客户端会在控制台要求输入内容,输入后信息会在服务端打印,同时客户端显示转为大写的内容,此示例服务端与客户端运行在一台服务器:
服务端监听
<?php // 创建套接字 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 设置 ip 被释放后立即可使用 socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, true); // 绑定ip与端口 socket_bind($socket, 0, 8888); // 开始监听 socket_listen($socket); while (true) { // 接收内容 $conn_sock = socket_accept($socket); socket_getpeername($conn_sock, $ip, $port); // echo '请求ip: ' . $ip . PHP_EOL . '端口: ' . $port; while (true) { // 获取消息内容 $msg = socket_read($conn_sock, 10240); // TODO 处理业务逻辑 // 将信息转为大写并原样返回客户端 socket_write($conn_sock, strtoupper($msg)); echo $msg; } }
客户端连接
<?php // 创建套接字 $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 连接服务端 socket_connect($socket, '127.0.0.1', 8888); while (true) { // 让控制台输入内容 fwrite(STDOUT, '请输入内容:'); $in = fgets(STDIN); // 向服务端发送内容 socket_write($socket, $in); // 读取服务端发送的消息 $msg = socket_read($socket, 10240); echo $msg; }
语法解释
socket_create
socket_create(int $domain,int $type, int $protocol): resource|false
创建并返回一个套接字资源,通常也称作一个通讯节点。一个典型的 socket 由至少 2 个套接字组成,其中一个运行在客户端,一个运行在服务端。
参数:
domain
指定当前套接字使用什么协议,可用协议如下:Domain 描述 AF_INET IPv4 网络协议,TCP 与 UDP 都可使用此协议 AF_INET6 IPv6 网络协议,TCP 与 UDP 都可使用此协议 AF_UNIX 本地通讯协议,具有高性能与低成本的 IPC type
Schnelle Erfahrung
🎜🎜🎜Typ🎜🎜 beschreiben 🎜🎜🎜🎜🎜🎜Sock_stream🎜🎜 kann sequenziert werden Ein zuverlässiger, verbindungsbasierter Vollduplex-Bytestrom, der Mechanismen zur Steuerung des Datenübertragungsflusses unterstützt. Das TCP-Protokoll basiert auf diesem Streaming-Socket. 🎜🎜🎜🎜SOCK_DGRAM🎜🎜Unterstützung für Datennachrichten (verbindungslos, unzuverlässig, feste maximale Länge). Das UDP-Protokoll basiert auf diesem Nachrichten-Socket Bei der Kommunikation liest das Datenende das gesamte Datenpaket, indem es jedes Datensegment empfängt. 🎜🎜🎜🎜SOCK_RAW🎜🎜Lesen Sie das ursprüngliche Netzwerkprotokoll. Dieser spezielle Socket ist verfügbar. Er eignet sich zum manuellen Erstellen jeder Art von Protokoll. Dieser Socket wird im Allgemeinen verwendet ICMP-Anfragen implementieren🎜🎜🎜🎜SOCK_RDM🎜🎜Zuverlässige Datenschicht, aber die Ankunftsreihenfolge ist nicht garantiert. Allgemeine Betriebssysteme implementieren diese Funktion nichtDie vereinfachten Codes des Servers und des Clients lauten wie folgt. Nach dem Ausführen blockiert der Server und wartet auf die Der Client stellt eine Verbindung her und der Client fragt nach Eingabeinhalten auf der Konsole. Nach der Eingabe werden die Informationen auf dem Server gedruckt und der Client zeigt den Inhalt in Großbuchstaben an. Dieser Beispielserver und der Client werden auf demselben Server ausgeführt. Serverüberwachung Ein typischer Socket besteht aus mindestens 2 Sockets, einem auf der Clientseite und einem auf der Serverseite. Parameter: domain
gibt an, welches Protokoll der aktuelle Socket verwendet: DescriptionDomain AF_INET AF_INET6IPv4-Netzwerkprotokoll, sowohl TCP als auch UDP können dieses Protokoll verwenden AF_UNIXIPv6-Netzwerkprotokoll, sowohl TCP als auch UDP können dieses Protokoll verwenden Lokales Kommunikationsprotokoll mit hoher Leistung und geringen Kosten IPC c Typ
Der Typ des Benutzers gibt den Typ des aktuellen Jet-Worts an.protocol
设置指定 domain 套接字下的具体协议,如果所需协议是 TCP 或者 UDP,可以直接使用常量SOL_TCP
或SOL_UDP
,这个参数的具体值可通过getprotobyname()
函数获取
返回值
socket_create()
正确时返回一个套接字资源,失败时返回 false
。可以调用 socket_last_error()
获取错误码,错误码可以通过 socket_strerror(int $err_no)
转换为文字的错误说明。
socket_bind
socket_bind(resource $socket, string $address [, int $port]): bool
绑定一个地址与端口到套接字
参数:
socket
使用socket_create()
创建的套接字资源address
如果套接字是
AF_INET
族,那么address
必须是一个四点法的 IP 地址,例如127.0.0.1
、0.0.0.0
如果套接字是
AF_UNIX
族,那么address
是 Unix 套接字一部分(例如/tmp/my.sock
)port
(可选)该参数仅用于使用
AF_INET
族时,指定当前套接字监听的端口号
返回值:
绑定成功返回 true
,失败时则返回 false
,同 socket_create
,在绑定失败时可以调用 socket_last_error()
获取错误码,错误码可以通过 socket_strerror(int $err_no)
转换为文字的错误说明。
socket_listen
socket_listen(resource $socket [, int $backlog]): bool
在使用 socket_create()
创建套接字并使用 socket_bind()
将其绑定到名称之后,可能会告诉它侦听套接字上的传入连接。该函数仅适用于 SOCK_STREAM
或 SOCK_SEQPACKET
类型的套接字。
参数:
socket
使用socket_create()
创建的套接字资源backlog
最大数量的积压传入连接将排队等待处理,如果连接请求到达时队列已满,则客户端可能会收到指示为ECONNREFUSED
的错误。或者,如果底层协议支持重传,则可能会忽略该请求,以便重试可能会成功。
返回值:
绑定成功返回 true
,失败时则返回 false
,可以调用 socket_last_error()
获取错误码,错误码可以通过 socket_strerror(int $err_no)
转换为文字的错误说明。
socket_accept
socket_accept(resource $socket): resource|false
当有新的客户端连接时,返回一个新的 socket 资源以用于与客户端通信,如有多个连接排队,则返回第一个连接,相反如果没有待处理的连接,该函数会默认阻塞当前进程,直至新的客户端连接、断开
参数:
socket
使用socket_create()
创建的套接字资源
返回值:
成功时返回一个新的套接字资源,错误时返回 false
,可以调用 socket_last_error()
获取错误码,错误码可以通过 socket_strerror(int $err_no)
转换为文字的错误说明。
socket_connect
socket_connect(resource $socket, string $address [, int $port = null]): bool
使用套接字实例发起到 address
的连接
参数:
socket
该参数必须是由socket_create()
创建的socket
实例address
如果套接字是
AF_INET
族,那么address
必须是一个四点法的 IP 地址,例如127.0.0.1
如果支持 IPv6 并且套接字是AF_INET6
,那么address
也可以是一个有效的 IPv6 地址(例如::1
)如果套接字是
AF_UNIX
族,那么address
是 Unix 套接字一部分(例如/tmp/my.sock
)
返回值:
成功时返回 true
, 或者在失败时返回 false
socket_write
socket_write(resource $socket, string $data [, int $length = null]): int|false
传输数据至指定套接字
参数:
socket
使用socket_create()
或socket_accept()
创建的套接字资源data
要发送的内容length
(可选)可以指定发送套接字的替代字节长度。如果这个长度大于实际发送内容的长度,它将被静默地截断为实际发送内容的长度。
返回值:
成功时返回成功发送的字节数,或者在失败时返回 false
,可以调用 socket_last_error()
与 socket_strerror(int $err_no)
获取具体错误信息
socket_read
socket_read(resource $socket, int $length, int $mode = PHP_BINARY_READ): string|false
从套接字资源内读取数据
参数:
socket
使用socket_create()
或socket_accept()
创建的套接字资源(服务端为socket_accept()
客户端为socket_create()
)length
指定最大能够读取的字节数。否则您可以使用\r
、\n
、\0
结束读取(根据mode
参数设置)mode
(可选)PHP_BINARY_READ
(默认)- 使用系统的recv()
函数。二进制安全地读取数据。PHP_NORMAL_READ
- 读取到\n
、\r
时停止。
返回值:
socket_read()
返回一个字符串,表示接收到的数据。如果发生了错误(包括远程主机关闭了连接),则返回 false
,可以调用 socket_last_error()
与 socket_strerror(int $err_no)
获取具体错误信息
socket_close
socket_close(resource $socket): void
关闭并销毁一个套接字资源
参数:
-
socket
使用socket_create()
或socket_accept()
创建的套接字资源
返回值:
无
推荐学习:《PHP视频教程》
Das obige ist der detaillierte Inhalt vonDie PHP+Socket-Serie realisiert die Datenübertragung zwischen Client und Server. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.
