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

Socket Communication တွင် Pack () function ကိုမည်သို့အသုံးပြုရမည်နည်း။ ဒီဥပမာကိုဖတ်ပြီးနောက်သင်နားလည်လိမ့်မည်

M66 2025-06-03

PHP တွင် Socket Cane များပြုလုပ်ရာတွင်ကျွန်ုပ်တို့သည်အခြေအနေများ (encapapsulate) ကိုထုပ်ပိုးရန်နှင့်ဒေတာများကိုအကာအကွယ်ပေးရန်လိုအပ်သည့်အခြေအနေများကိုဖြည်ရန်လိုအပ်သည့်အခြေအနေများကိုမကြာခဏကြုံတွေ့ရလေ့ရှိသည်။ Pack () function သည်ဤပြ problem နာကိုဖြေရှင်းရန်လက်နက်ဖြစ်သည်။ ဤဆောင်းပါးသည် အထုပ် () function ကို Socket Communication တွင်သတ်သတ်မှတ်မှတ်အသုံးပြုမှုကိုရှင်းပြရန်ရိုးရှင်းသောဥပမာတစ်ခုကိုပေါင်းစပ်ပါမည်။


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

Pack () သည် PHP ၏ built-in function တစ်ခုဖြစ်သည်။ ၎င်းသည်သတ်မှတ်ထားသောပုံစံအရဒေတာများကို binary strings များထဲသို့ထည့်နိုင်သည်။ ဤနည်းအားဖြင့်ပြုပြင်ထားသောအချက်အလက်များသည်ကွန်ယက်ကိုထုတ်လွှင့်ရန်ပိုမိုကျစ်လစ်သိပ်သည်းသည်။

အခြေခံ syntax ဖြစ်ပါတယ်:

 string pack ( string $format , mixed $args [, mixed $... ] )
  • $ format သည်ကိန်းဂဏန်းများ, ဇာတ်ကောင်, ရေပေါ်အမှတ်စစသည့်ထုပ်ပိုးမှုစည်းမျဉ်းများကိုသတ်မှတ်ပေးသော format string တစ်ခုဖြစ်သည်။

  • အဆိုပါနောက်ဆက်တွဲ parametersters သက်ဆိုင်ရာပုံစံအတွက်ဒေတာဖြစ်ကြသည်။


အဘယ်ကြောင့် Socket ဆက်သွယ်ရေးလိုအပ်သနည်း။

Socket Communication တွင်ဒေတာများကို byte stream တွင်ပို့သည်။ ကွဲပြားခြားနားသောစက်များ၏ Entianness သည်ကွဲပြားခြားနားပြီးစာသားသို့မဟုတ်ပုံမှန်အချက်အလက်များကိုတိုက်ရိုက်ပေးပို့ခြင်းသည်လက်ခံသူအားအမှားအယွင်းများကိုဖြစ်ပေါ်စေနိုင်သည်။

Pack () လုပ်နိုင်သည် -

  • ပေးပို့ခြင်းနှင့်လက်ခံခြင်း၏အပိုင်းများသည်တသမတ်တည်းဖြစ်ကြောင်းသေချာစေရန်အချက်အလက်များကိုသတ်မှတ်ထားသောပုံစံဖြင့်အချက်အလက်များကိုသတ်မှတ်ထားသည့်ပုံစံဖြင့် encode လုပ်ပါ။

  • Enterianness ပြ issues နာများကိုကိုင်တွယ်ပါ (Big Endian, Little endian) ။

  • လွယ်ကူသောထုတ်လွှင့်ခြင်းနှင့်ခွဲခြမ်းစိတ်ဖြာခြင်းအတွက်သတ်မှတ်ထားသောအရှည်ဖြင့် binary data ကိုထုတ်လုပ်ပါ။


package () ၏လျှောက်လွှာကိုဥပမာနှင့်အတူ Socket ဆက်သွယ်မှုအတွက်ရှင်းပြပါ

TCP Socket မှတစ်ဆင့် data packet တစ်ခုပို့လိုပါကပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -

လယ်ကွင်း ပုံနှိပ်စာ ဥပမာပြပါ
အထုပ်အရှည် လက်မှတ်မပြည့်မီတိုတို (2 bytes) အထုပ်အရှည် field သူ့ဟာသူဖယ်ထုတ်ပြီးအထုပ်အရှည်
command နံပါတ် လက်မှတ်မပြည့်မီတိုတို (2 bytes) Command ID
အချက်များ ကြိုး တိကျသောအကြောင်းအရာ

Code Pegion ကိုပို့ပါ

 <?php
// Simulate Simulate ဒေတာ
$command = 1001;
$data = "Hello, socket communication!";

// ဒေတာအရှည်တွက်ချက်
$dataLen = strlen($data);

// အထုပ်၏အရှည်သည် command နံပါတ်အရှည်ဖြစ်သည် + ဒေတာအရှည် (2 + $dataLen)
$packetLen = 2 + $dataLen;

// အသုံးပြု pack အထုပ်အရှည်နှင့် command နံပါတ်(အသုံးပြု网络字节序,Big Endian)
$header = pack('n', $packetLen) . pack('n', $command);

// ပြီးပြည့်စုံသောအထုပ် splicing
$packet = $header . $data;

// ကထူထောင်ခဲ့တာယူဆ socket ဆက်,socket_write ဒေတာပို့ပါ
// socket_write($socket, $packet, strlen($packet));

echo "发送的二进制ဒေတာအရှည်: " . strlen($packet) . "\n";
echo "binary ဒေတာ16အမျိုးအစားကိုယ်စားပြုမှု: " . bin2hex($packet) . "\n";
?>

ခွဲခြမ်းစိတ်ဖြာခြင်းညွှန်ကြားချက်များ

  • Pack ('N', $ packetlen) သည်လက်မှတ်မထိုးထားသောကိန်းဂဏန်းများ (2 bytes) နှင့် Network Enterianness တွင် $ packetlen ကို ထုပ်ပိုးခြင်း (By Endianness) တွင်ထုပ်ပိုးထားသည်။

  • Pack ('N', $ command) အလားတူ, command နံပါတ်ကိုထုပ်ပိုးပါ။

  • splicing ပြီးနောက်အထုပ်သည်အချက်အလက်အကြောင်းအရာကိုလိုက်နာသည်။

receiver parsing ဥပမာ

ဒေတာကိုလက်ခံရရှိပြီးနောက်၎င်းကိုသင်ဤကဲ့သို့သောခွဲခြမ်းစိတ်ဖြာနိုင်သည်။

 <?php
// ယူဆချက် $recvData ဟုတ်ကဲ့ socket Binary Data ကိုဖတ်ပါ
// ဥပမာအားဖြင့်: $recvData = socket_read($socket, 1024);

// ပထမ ဦး ဆုံးအထုပ်အရှည်နှင့် command ကိုနံပါတ် parse
$header = substr($recvData, 0, 4);
list($packetLen, $command) = array_values(unpack('npacketLen/command', $header));

// ဒေတာအကြောင်းအရာကိုထုတ်ယူပါ
$data = substr($recvData, 4, $packetLen - 2);

echo "အထုပ်အရှည်: $packetLen\n";
echo "command နံပါတ်: $command\n";
echo "ဒေတာအကြောင်းအရာ: $data\n";
?>

အကျဉ်းချုပ်

  • Pack () function သည် binary data ထုပ်ပိုးခြင်းအတွက်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်ပြီးကွန်ယက် protocols နှင့် binary file operations အမျိုးမျိုးအတွက်သင့်တော်သည်။

  • Socket Communication တွင် Pack () ၏ဆင်ခြင်တုံတရားအသုံးပြုခြင်း () သည်အခြေခံအချက်အလက်ပုံစံနှင့်တည်ငြိမ်သောဆက်သွယ်ရေးကိုသေချာစေနိုင်သည်။

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

  • Enterianity ပြ issue နာကိုအထူးဂရုပြုပါ။ ကွန်ယက်ဆက်သွယ်မှုသည်ယေဘုယျအားဖြင့်ကွန်ယက် Enterianness (Big Entianness) ကို လက်ခံသည်။

အကယ်. သင်သည် Binary protocols များကို အခြေခံ. ကွန်ယက်ဆက်သွယ်မှုကိုလုပ်ဆောင်နေပါက အထုပ် () ကို လေ့ကျင့်ရန်နှင့် ထုပ်ပိုးခြင်း () ကို လေ့ကျင့်ရန်အထူးအကြံပြုလိုပါသည်။