Rumah pembangunan bahagian belakang tutorial php php 与 erlang 实现二进制通信

php 与 erlang 实现二进制通信

Jun 13, 2016 pm 12:35 PM
data define format quot timeout

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.
Salin selepas log masuk

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);
}
?>
Salin selepas log masuk

正常情况下php端会显示以下内容:

Array ( [len] => 4 [cmd] => 10001 [content] => abcd )
Salin selepas log masuk

通讯说明

这里用到的是php的pack函数和unpack函数

pack函数:将数据按照一定格式打包成二进制数据,生成的数据接近C/C++的结构体(C/C++字符串带结束符)。

unpack函数:与pack相反,对二进制数据进行解包。

而erlang端,直接用位语法来匹配二进制数据即可


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mengkonfigurasi tamat masa Nginx Bagaimana untuk mengkonfigurasi tamat masa Nginx May 12, 2023 pm 10:07 PM

keepalive_timeouthttp mempunyai mod keepalive, yang memberitahu pelayan web untuk memastikan sambungan TCP terbuka selepas memproses permintaan. Jika ia menerima permintaan lain daripada klien, pelayan akan menggunakan sambungan tidak tertutup ini tanpa membuat sambungan lain. httpkeep-alive, setiap permintaan pada halaman web ialah http (gambar, css, dll.), dan untuk membuka permintaan http, anda mesti mewujudkan sambungan tcp terlebih dahulu Jika halaman perlu membuka dan menutup sambungan tcp untuk setiap permintaan , ia akan dijadikan sumber Pembaziran keepalive_timeout ialah apabila permintaan http selesai, sambungan tcpnya akan kekal

Bagaimana untuk menyelesaikan skrin biru tamat masa pengawas jam win11? Bagaimana untuk menyelesaikan skrin biru tamat masa pengawas jam win11? Feb 14, 2024 pm 04:00 PM

Ramai pengguna akan mengalami skrin biru selepas menaik taraf sistem win11, seperti: clockwatchdogtimeout blue screen, jadi bagaimana untuk menyelesaikannya? Pengguna boleh mengemas kini pemandu atau menyemak masalah terlalu panas, dsb. Biarkan laman web ini dengan teliti memperkenalkan kepada pengguna penyelesaian kepada skrin biru win11 clockwatchdogtimeout. Penyelesaian kepada clockwatchdogtimeout blue screen win11 1. Kemas kini pemacu: Mengemas kini pemacu CPU dan motherboard boleh menyelesaikan masalah. Anda boleh memuat turun pemacu terkini dengan melawati tapak web pengilang. 2. Semak isu terlalu panas: Terlalu panas juga mungkin salah satu punca ralat ini.

Apakah yang perlu saya lakukan jika 'Ralat: tamat masa xxxms melebihi' berlaku apabila menggunakan sumber vue dalam aplikasi Vue? Apakah yang perlu saya lakukan jika 'Ralat: tamat masa xxxms melebihi' berlaku apabila menggunakan sumber vue dalam aplikasi Vue? Jun 24, 2023 pm 02:21 PM

Dalam pembangunan aplikasi Vue, menggunakan vue-resource untuk membuat permintaan HTTP adalah operasi biasa. Walaupun vue-resource menyediakan banyak fungsi yang mudah, kadangkala kami menghadapi mesej ralat seperti "Ralat: timeoutofxxxmsexceeded". Ralat ini biasanya disebabkan oleh tamat masa permintaan. Jadi, dalam kes ini, bagaimana kita harus menyelesaikan masalah ini? 1. Tingkatkan tamat masa permintaan Pertama, kita boleh meningkatkan masa tamat permintaan sebanyak

Apakah yang perlu saya lakukan jika 'Ralat: tamat masa xxxms melebihi' berlaku apabila menggunakan axios dalam aplikasi Vue? Apakah yang perlu saya lakukan jika 'Ralat: tamat masa xxxms melebihi' berlaku apabila menggunakan axios dalam aplikasi Vue? Jun 24, 2023 pm 03:27 PM

Apakah yang perlu saya lakukan jika "Ralat: timeoutofxxxmsexceeded" berlaku apabila menggunakan axios dalam aplikasi Vue? Dengan perkembangan pesat Internet, teknologi bahagian hadapan sentiasa dikemas kini dan diulang Sebagai rangka kerja bahagian hadapan yang sangat baik, Vue telah dialu-alukan oleh semua orang sejak beberapa tahun kebelakangan ini. Dalam aplikasi Vue, kita selalunya perlu menggunakan axios untuk membuat permintaan rangkaian, tetapi kadangkala ralat "Ralat: timeoutofxxxmsexceeded" berlaku.

defineHow untuk menentukan makro berbilang baris defineHow untuk menentukan makro berbilang baris Oct 11, 2023 pm 01:24 PM

define mentakrifkan makro berbilang baris dengan menggunakan `\` untuk membahagikan `do { \ printf("%d\n", x } manakala (0)` kepada berbilang baris untuk definisi. Dalam takrifan makro, sengkang ke belakang `\` mestilah aksara terakhir takrifan makro dan tidak boleh diikuti dengan ruang atau ulasan. Apabila menggunakan `\` untuk kesinambungan baris, berhati-hati untuk memastikan kod boleh dibaca dan pastikan terdapat `\` di hujung setiap baris.

Terokai kepentingan dan peranan define function dalam PHP Terokai kepentingan dan peranan define function dalam PHP Mar 19, 2024 pm 12:12 PM

Kepentingan dan peranan fungsi define dalam PHP 1. Pengenalan asas kepada fungsi define Dalam PHP, fungsi define ialah fungsi utama yang digunakan untuk menentukan pemalar tidak akan mengubah nilainya semasa menjalankan program. Pemalar yang ditakrifkan menggunakan fungsi define boleh diakses di seluruh skrip dan bersifat global. 2. Sintaks fungsi define Sintaks asas fungsi define adalah seperti berikut: define("constant name","constant value&qu

Bagaimana untuk menyelesaikan 504 gateway timeout Bagaimana untuk menyelesaikan 504 gateway timeout Nov 27, 2023 am 10:55 AM

Penyelesaian untuk tamat masa 504: 1. Semak beban pelayan; 2. Optimumkan pertanyaan dan kod; . Menyelesaikan masalah 9. Tambah cache; Menyelesaikan ralat ini selalunya memerlukan gabungan faktor, termasuk prestasi pelayan, sambungan rangkaian, konfigurasi pelayan proksi dan pengoptimuman aplikasi.

defineHow untuk menentukan kompilasi bersyarat defineHow untuk menentukan kompilasi bersyarat Oct 11, 2023 pm 01:20 PM

defineKompilasi bersyarat boleh dicapai menggunakan arahan prapemprosesan `#ifdef`, `#ifndef`, `#if`, `#elif`, `#else` dan `#endif`.

See all articles