လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> stream_socket_client ဖြင့် Conjunction တွင်ကုန်ကြမ်းဒေတာများကိုပို့ရန် Pack () ကိုသုံးပါ။

stream_socket_client ဖြင့် Conjunction တွင်ကုန်ကြမ်းဒေတာများကိုပို့ရန် Pack () ကိုသုံးပါ။

M66 2025-06-04

ကွန်ယက်ပရိုဂရမ်းမင်းတွင်တစ်ခါတစ်ရံတွင်အထူးသဖြင့်အချို့သော protocols များကိုအကောင်အထည်ဖော်သည့်အခါ, PHP သည်အလွန်အစွမ်းထက်သော function pack () ကို သတ်မှတ်ထားသောပုံစံဖြင့် binary strings များထဲသို့ထည့်သွင်းနိုင်သည့်အလွန်အစွမ်းထက်သော pack ကိုပေးသည်။ stream_socket_cletient ()) နှင့်ပေါင်းစပ်ပြီး, ဤအချက်အလက်များကို TCP သို့မဟုတ် UDP ဆက်သွယ်မှုကိုအလွယ်တကူပို့နိုင်သည်။

ဤဆောင်းပါးသည် PHP ၏ Pack () function ကို အသုံးပြု. အချက်အလက်များကိုအချက်အလက်များကိုတပ်ဆင်ရန်နှင့် stream_socket_client () မှတဆင့်သတ်မှတ်ထားသော server သို့ပို့ရန်မည်သို့အသေးစိတ်ဖော်ပြထားသည်။


1 ။ နိဒါန်း Pack () function ကို

Pack () function ကိုဒေတာကို binary strings အဖြစ်ပြောင်းရန်အသုံးပြုသည်။ ၎င်း၏ပထမဆုံး parameter သည် format string ကို string နှင့်နောက်ဆက်တွဲ parameters တွေကိုထုပ်ပိုးဖို့ဒေတာဖြစ်ကြသည်။ format string တွင်အမျိုးအစားအမျိုးမျိုးပါ 0 င်သည်။

  • C - လက်မှတ်မထိုးထားသောစာလုံးများ (1 byte)

  • N - လက်မှတ်မထိုးထားသောကိန်းတို (2 bytes, ကြီးမားသော endian)

  • N - လက်မှတ်မထိုးထားသောရှည်လျားသော (4 bytes, big endian)

  • A - Nul ဇာတ်ကောင်ဖြည့် string ကို

  • A - အာကာသဖြည့် string ကို

ဥပမာအားဖြင့်:

 $data = pack('Cnn', 0x01, 300, 400);

ဤတွင် 0x01 သည် byte ဖြစ်ပြီး 300 နှင့် 400 သည် 2 byte လက်မှတ်မထိုးထားသောကိန်းဂဏန်းများဖြစ်သည်။


2 ။ stream_socket_client ကိုမိတ်ဆက် ()

Stream_socket_cletient () သည် client အတွက်ကွန်ယက်ဆက်သွယ်မှုတစ်ခုကိုဖန်တီးရန်နှင့် TCP, UDP နှင့်အခြား protocols များကိုထောက်ပံ့ရန်အသုံးပြုသည်။ ဘုံ syntaxes အောက်ပါအတိုင်းဖြစ်သည် -

 $socket = stream_socket_client("tcp://m66.net:12345", $errno, $errstr, 30);
  • ပထမ ဦး ဆုံး parameter သည်လိပ်စာဖြစ်သည်, ပုံစံမှာ TCP ဖြစ်သည်။ // domain name: port

  • ဆက်သွယ်မှုသည်အရင်းအမြစ်ကိုအောင်မြင်စွာပြန်ပို့ပြီးကျရှုံးမှုသည် မှားယွင်းသောအကျိုးကို ပြန်လည်ရရှိစေသည်

  • $ errno နှင့် $ errorstr သည် အမှားကုဒ်များနှင့်အမှားအယွင်းများကိုပြန်ပို့လိမ့်မည်

  • နောက်ဆုံး parameter သည်အချိန်ကုန်အချိန် (စက္ကန့်)

ဤဆက်သွယ်မှုမှတစ်ဆင့်အချက်အလက်များကိုလက်ခံရရှိရန်အချက်အလက်များနှင့် fread () ကို ပို့ရန် () ကိုသုံးရန် fwe () ကို သုံးနိုင်သည်။


3 ။ ဥပမာ - Pack () နှင့်ပို့ပါ

ကျွန်ုပ်တို့သည် protocol packet ကိုဆာဗာသို့ပို့ရန်လိုအပ်ကြောင်းဆိုပါစို့။ ပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -

  • 0x10 မှ fixed 1 byte command ကုဒ်

  • အသုံးပြုသူ ID 2 bytes, Big endian

  • 4 byte timestamp, Big endian

  • 8 byte string ကို (8 bytes 8 bytes, အာကာသ padding)

PHP Code Perfection:

 <?php

// ပစ်မှတ်ဆာဗာသတင်းအချက်အလက်
$host = "m66.net";
$port = 12345;

// ဖန်တီး TCP ဆက်
$socket = stream_socket_client("tcp://$host:$port", $errno, $errstr, 10);
if (!$socket) {
    die("ဆက်失败: $errstr ($errno)\n");
}

// ဒေတာကိုပြင်ဆင်ပါ
$command = 0x10;
$userId = 1025;
$timestamp = time();
$username = "user123";

// ထုပ်ပိုးဒေတာ
// C - 1byte offigned integer
// n - 2byte offigned တိုတောင်းတဲ့ကိန်း(Big Endian)
// N - 4byte offigned ရှည်လျားသောကိန်းဂဏန်း(Big Endian)
// A8 - အရှည်သည်8ကြိုး,အာကာသဖြည့်
$packedData = pack('CnNA8', $command, $userId, $timestamp, $username);

// ဒေတာပို့ပါ
fwrite($socket, $packedData);

// ဆာဗာတုံ့ပြန်မှုကိုဖတ်ပါ(ဆာဗာပြန်လာလိမ့်မည်ဟုယူဆပါ 4 byte တုံ့ပြန်မှုကုဒ်)
$response = fread($socket, 4);
if ($response !== false) {
    $responseCode = unpack('N', $response)[1];
    echo "ဆာဗာတုံ့ပြန်မှုကုဒ်: $responseCode\n";
} else {
    echo "ဆာဗာတုံ့ပြန်မှုကိုလက်ခံရရှိခြင်းမရှိပါ\n";
}

fclose($socket);

4 ။ အဓိကအချက်များအကျဉ်းချုပ်

  • Pack () ကို အသုံးပြုခြင်းသည်ဒေတာအမျိုးအစားများကိုအလွယ်တကူပြောင်းလဲနိုင်သည်။

  • stream_socket_cletient () သည်ကွန်ယက်ချိတ်ဆက်မှုများကိုဖန်တီးရန်နှင့် protocols မျိုးစုံကိုထောက်ပံ့ရန်အသုံးပြုသည်။

  • Binary data များကိုပေးပို့သည့်အခါပါတီနှစ်ခုစလုံးသည် protocol format ကို အခြေခံ. အထူးသဖြင့်ဒေတာအရှည်နှင့် byte အမိန့်ကိုနားလည်ရန်သေချာစေပါ။

  • ဒေတာများကိုဖတ်ရှုသောအခါ unpack () ကို မူရင်း binary data ကိုခွဲခြမ်းစိတ်ဖြာရန်လည်းအသုံးပြုသင့်သည်။