php 与 erlang 实现二进制通信
php 与 erlang 实现二进制通讯
网络通讯常用的有2种:文本通讯和二进制通讯。php与erlang之间文本通讯比较简单,这里不做讨论,主要讨论php与erlang实现二进制通讯。
通讯示例
erlang端代码:
-module(server). -export([start/0]). -define( UINT, 32/unsigned-little-integer). -define( INT, 32/signed-little-integer). -define( USHORT, 16/unsigned-little-integer). -define( SHORT, 16/signed-little-integer). -define( UBYTE, 8/unsigned-little-integer). -define( BYTE, 8/signed-little-integer). -define( PORT, 5678). %% 启动服务并接受客户端的连接 start() -> {ok, LSock} = gen_tcp:listen(?PORT, [binary, {packet, 0},{active, false}]), io:format("socket listen: ~p on ~p ~n",[LSock, ?PORT]), accept(LSock). accept(LSock) -> {ok, ASock} = gen_tcp:accept(LSock), spawn(fun() -> server_loop(ASock) end), accept(LSock). server_loop(ASock) -> case gen_tcp:recv(ASock, 0) of {ok, > = A} -> io:format("recv data: ~p ~p ~p~n", [Len, Cmd, Contain]), %%将接收到数据发送回客户端 gen_tcp:send(ASock, A), server_loop(ASock); {ok, Data} -> io:format("recv unformated data: ~p~n", [Data]), server_loop(ASock); {error, _} -> {ok, recv_error} end.
php端代码:
<?php $timeout = 3; //超时时间:3秒 $fp = fsockopen("tcp://127.0.0.1", 5678, $errno, $errstr, $timeout/* 连接超时时间 */); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { stream_set_timeout($fp, $timeout); //远程数据接收或发送超时时间 $format = "vva4"; $data = pack($format, 4, 10001, "abcd"); //$data 按照一定格式被打包成二进制数据 fwrite($fp, $data); if (!feof($fp)) { $rs = fread($fp, 1024); //读取远程数据 if ($rs) { $len = strlen($rs); //$len 可以获取数据的长度,用以计算content的长度 //在这个例子中,content 的长度为 4 $format = "vlen/vcmd/a4content"; $data = unpack($format, $rs); print_r($data); } else { echo "timeout!"; } } else { echo "timeout!"; } fclose($fp); } ?>
正常情况下php端会显示以下内容:
Array ( [len] => 4 [cmd] => 10001 [content] => abcd )
通讯说明
这里用到的是php的pack函数和unpack函数
pack函数:将数据按照一定格式打包成二进制数据,生成的数据接近C/C++的结构体(C/C++字符串带结束符)。
unpack函数:与pack相反,对二进制数据进行解包。
而erlang端,直接用位语法来匹配二进制数据即可

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



keepalive_timeouthttp verfügt über einen Keepalive-Modus, der den Webserver anweist, die TCP-Verbindung nach der Verarbeitung einer Anfrage offen zu halten. Wenn er andere Anfragen vom Client erhält, verwendet der Server diese nicht geschlossene Verbindung, ohne eine weitere Verbindung aufzubauen. httpkeep-alive, jede Anfrage auf der Webseite ist http (Bilder, CSS usw.), und um eine http-Anfrage zu öffnen, müssen Sie zuerst eine TCP-Verbindung herstellen. Wenn eine Seite für jede Anfrage eine TCP-Verbindung öffnen und schließen muss Die Verschwendung von keepalive_timeout besteht darin, dass die TCP-Verbindung bestehen bleibt, wenn eine HTTP-Anfrage abgeschlossen ist

Bei vielen Benutzern wird nach dem Upgrade des Win11-Systems ein Bluescreen auftreten, z. B.: Clockwatchdogtimeout-Bluescreen. Wie lässt sich das Problem lösen? Benutzer können den Treiber aktualisieren oder auf Überhitzungsprobleme usw. prüfen. Auf dieser Website wird den Benutzern die Lösung für den Clockwatchdogtimeout-Bluescreen in Win11 sorgfältig vorgestellt. Lösung für den Clockwatchdogtimeout-Bluescreen in Win11 1. Aktualisieren Sie den Treiber: Durch Aktualisieren der CPU- und Motherboard-Treiber kann das Problem möglicherweise behoben werden. Sie können die neuesten Treiber herunterladen, indem Sie die Website des Herstellers besuchen. 2. Suchen Sie nach Überhitzungsproblemen: Überhitzung kann ebenfalls eine der Ursachen für diesen Fehler sein.

Bei der Entwicklung von Vue-Anwendungen ist die Verwendung von vue-resource zum Senden von HTTP-Anfragen ein häufiger Vorgang. Obwohl vue-resource viele praktische Funktionen bietet, stoßen wir manchmal auf Fehlermeldungen wie „Fehler: timeoutofxxxmsexceeded“. Dieser Fehler wird normalerweise durch eine Zeitüberschreitung der Anforderung verursacht. Wie sollen wir also in diesem Fall dieses Problem lösen? 1. Erhöhen Sie das Anforderungs-Timeout. Zunächst können wir das Anforderungs-Timeout um erhöhen

Was soll ich tun, wenn bei der Verwendung von Axios in einer Vue-Anwendung „Fehler: timeoutofxxxmsexceeded“ auftritt? Mit der rasanten Entwicklung des Internets wird die Front-End-Technologie ständig aktualisiert und iteriert. Als hervorragendes Front-End-Framework wurde Vue in den letzten Jahren von allen begrüßt. In Vue-Anwendungen müssen wir häufig Axios verwenden, um Netzwerkanforderungen zu stellen, aber manchmal tritt der Fehler „Fehler: timeoutofxxxmsexceeded“ auf.

define definiert ein mehrzeiliges Makro, indem es „do { \ printf("%d\n", x \ } while (0)“ zur Definition in mehrere Zeilen aufteilt. In einer Makrodefinition muss der Backslash „\“ das letzte Zeichen der Makrodefinition sein und darf weder Leerzeichen noch Kommentare enthalten. Wenn Sie „\“ zur Zeilenfortsetzung verwenden, achten Sie darauf, dass der Code lesbar bleibt und stellen Sie sicher, dass am Ende jeder Zeile ein „\“ steht.

Die Bedeutung und Rolle der Definitionsfunktion in PHP 1. Grundlegende Einführung in die Definitionsfunktion In PHP ist die Definitionsfunktion eine Schlüsselfunktion zum Definieren von Konstanten. Konstanten ändern ihre Werte während der Ausführung des Programms nicht. Mit der Funktion „Definieren“ definierte Konstanten können im gesamten Skript aufgerufen werden und sind global. 2. Die Syntax der Definitionsfunktion Die grundlegende Syntax der Definitionsfunktion lautet wie folgt: define("Konstantenname",Konstantenwert&qu

Lösungen für 504-Gateway-Timeout: 1. Abfrage und Code optimieren; . Fehlerbehebung; 9. Cache hinzufügen 10. Anfragen analysieren. Die Behebung dieses Fehlers erfordert häufig eine Kombination verschiedener Faktoren, darunter Serverleistung, Netzwerkkonnektivität, Proxyserverkonfiguration und Anwendungsoptimierung.

Die defineConditional-Kompilierung kann mithilfe der Vorverarbeitungsanweisungen „#ifdef“, „#ifndef“, „#if“, „#elif“, „#else“ und „#endif“ erreicht werden.
