လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Network protocol အတွက် binary data packet ကိုဖန်တီးရန် Pack () ကိုသုံးပါ

Network protocol အတွက် binary data packet ကိုဖန်တီးရန် Pack () ကိုသုံးပါ

M66 2025-05-29

PHP ကွန်ယက်ဆက်သွယ်ရေးအစီအစဉ်များကိုရေးသည့်အခါတိကျသော protocol format နှင့်ကိုက်ညီသော binary data packets များကိုတည်ဆောက်ရန်လိုအပ်သည်။ ဤကိစ္စတွင် Pack () function သည်မရှိမဖြစ်လိုအပ်သောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းသည် PHP variable များကိုသတ်မှတ်ထားသောပုံစံဖြင့် binary strings များထဲသို့ထည့်သွင်းနိုင်ပြီးအခြေခံကွန်ယက်သို့မဟုတ်ဟာ့ဒ်ဝဲနှင့်ဆက်သွယ်မှုအတွက်အဆင်ပြေစေသည်။

1 ။ အထုပ် () function ကဘာလဲ?

Pack () PHP တွင် built-in function တစ်ခုဖြစ်ပြီး၎င်း၏အခြေခံ Syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

 string pack(string $format, mixed ...$values)
  • $ format သည်နောက်ဆက်တွဲအချက်အလက်များကိုထုပ်ပိုးရန်နည်းလမ်းကိုဖော်ပြရန်အသုံးပြုသော format string ကိုဆိုလိုသည်။

  • $ တန်ဖိုးများကို ထုပ်ပိုးဖို့လိုအပ်တဲ့တန်ဖိုးဖြစ်ပါတယ်။

Pack မှတဆင့်ထုတ်လုပ်သည့်အချက်အလက်များကိုများသောအားဖြင့် binary stretocol format နှင့်ကိုက်ညီသော binary stretocol format နှင့်ကိုက်ညီသော binary stretocol form လုပ်ခြင်း,

2 ။ ဘုံပုံစံဇာတ်ကောင်ဖော်ပြချက်

ဤတွင်ဘုံ format ဇာတ်ကောင်များနှင့်၎င်းတို့၏အဓိပ္ပါယ်များရှိသည်။

ဇာတ်ကောင် format ဖေါ်ပြ သိမ်းပိုက် bytes အရေအတွက်
လက်မှတ်မထားသော char (8 bits) 1
n လက်မှတ်မပြည့်မီသောတိုတောင်းသော (16-bit, network endian) 2
n လက်မှတ်မထိုးနိုင်သည့်ရှည်လျားသော (32 bits, network endianness) 4
တစ်စီး NUL ပြီးစီးခဲ့ string ကို (သတ်မှတ်ထားသောအရှည်) ပေြာင်းလဲတတ်သော
တစ်စီး ကွက်လပ်များနှင့်ပြည့်စုံသော (သတ်မှတ်ထားသောအရှည်) နှင့်အတူ string ကို ပေြာင်းလဲတတ်သော
ဆုတောင်းပါ Hexadecimal String (မြင့်မားသော bit depinis) တိုင်းနှစ်ခု bytes
x bytes ကိုဖြည့်ပါ (skip byte) 1

Network protocols များတွင် N နှင့် N သည်အထူးသဖြင့် "endian endian" (Big-endian endian) နှင့် Cross-platform ဆက်သွယ်ရေးအတွက်သင့်တော်သောကြောင့်ဖြစ်သည်။

3 ။ ရိုးရှင်းသော binary protocol ကိုတည်ဆောက်ပါ

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

  • 1 byte: ဗားရှင်းနံပါတ် (လက်မှတ်မထားသော 8-bits)

  • 2 bytes: မက်ဆေ့ခ်ျအမျိုးအစား (လက်မှတ်မထိုးထားသော 16 -bits)

  • 4 bytes: User ID (ID)

  • 10 bytes: အသုံးပြုသူအမည် (Ascii, Space Flaming)

Pack () ကို အောက်ပါနည်းလမ်းများဖြင့်သုံးနိုင်သည်။

 <?php
$version = 1;          // 1 ဒရယ်
$type = 100;           // 2 ဒရယ်
$userId = 123456789;   // 4 ဒရယ်
$username = 'Alice';   // အများဆုံး 10 ဒရယ်,အပြီးသတ်နေရာများ

$packet = pack('CnNA10', $version, $type, $userId, $username);

echo bin2hex($packet); // ထုပ်ပိုး hexadecimal ရလဒ်များကိုကြည့်ပါ
?>

ဤကုဒ်မှထုတ်လုပ်သော $ packet သည် protocol format နှင့်ကိုက်ညီသော binary data တစ်ခုဖြစ်ပြီး Socket သို့မဟုတ် Stream မှတဆင့်ဝေးလံခေါင်သီသော 0 န်ဆောင်မှုသို့တိုက်ရိုက်ပို့နိုင်သည်။

4 ။ ဆာဗာနှင့်ဆက်သွယ်မှုဥပမာ

ဝေးလံခေါင်သီသော server address သည် M66.net နှင့် port သည် 9000 ဖြစ်သည်ဟုယူဆသည်မှာ TCP ဆက်သွယ်မှုမှတဆင့်အထက်တွင်ဖော်ပြထားသော binary deta ကိုသင်ပို့နိုင်သည်။

 <?php
$fp = stream_socket_client("tcp://m66.net:9000", $errno, $errstr, 5);
if (!$fp) {
    die("ဆက်သွယ်မှုမအောင်မြင်ပါ: $errstr ($errno)");
}

// ဒေတာ packets တွေကိုတည်ဆောက်ခြင်း
$packet = pack('CnNA10', 1, 100, 123456789, 'Alice');

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

// တုံ့ပြန်မှုကိုလက်ခံရရှိသည်
$response = fread($fp, 1024);

// ဆက်သွယ်မှုကိုပိတ်ပါ
fclose($fp);

echo "ဆာဗာတုံ့ပြန်မှု: " . bin2hex($response);
?>

၎င်းသည် Binary Package ကို ထုပ်ပိုးခြင်း နှင့်အတူ binary package တစ်ခုတည်ဆောက်ခြင်းနှင့်ဝေးလံခေါင်သီသော server သို့ပို့ခြင်း (ဥပမာ M66.NET ) သို့ပို့ခြင်း

5 ။ ကျွမ်းကျင်မှု debugging

  • ထုပ်ပိုးထားသောအချက်အလက်များသည်မျှော်လင့်ချက်များနှင့်ကိုက်ညီကြောင်းကြည့်ရှုရန် bin2hex () သို့မဟုတ် ဖြည်ခြင်း () ကိုသုံးပါ။

  • Send data ကိုခွဲခြမ်းစိတ်ဖြာရန် Wireshark စသည့် Network Packet Packet Packet Capture tools များကိုသုံးပါ။

  • Enterian ကိုအာရုံစိုက်ပါ။ ကွန်ယက် protocols အများစုသည် Network byte order format ကိုအသုံးပြုသည်။

ကောက်ချက်

Pack () သည် PHP တွင် Binary protocols များကိုကိုင်တွယ်ရန် PHP တွင်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။ ၎င်းကိုကျွမ်းကျင်သည်မှာ C / C ++ ဆာဗာဖြင့်ထိရောက်စွာဆက်သွယ်နိုင်ရုံသာမကစိတ်ကြိုက် protocol ဒီဇိုင်းများကိုအကောင်အထည်ဖော်ရန်လည်းကူညီနိုင်သည်။ သင်ဂိမ်းဖွံ့ဖြိုးတိုးတက်မှု, အရာများ၏အင်တာနက်အင်တာနက်ဆက်သွယ်မှုကိုဆက်သွယ်ခြင်း, သို့မဟုတ်သင်၏ကိုယ်ပိုင်လျှောက်လွှာ protocol ကိုတည်ဆောက်ခြင်း, pack () ကို တည်ဆောက်ခြင်းသည်နက်ရှိုင်းသောနားလည်မှုနှင့်လျှောက်လွှာနှင့်ထိုက်တန်သော function တစ်ခုဖြစ်သည်။