လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> အချက်အလက်ထုပ်ပိုးခြင်းနှင့်ပေးပို့ခြင်းကိုရရှိရန် Pack () function and socket_sendto () ကိုမည်သို့အသုံးပြုရမည်နည်း။

အချက်အလက်ထုပ်ပိုးခြင်းနှင့်ပေးပို့ခြင်းကိုရရှိရန် Pack () function and socket_sendto () ကိုမည်သို့အသုံးပြုရမည်နည်း။

M66 2025-06-23

Network programming တွင်အချက်အလက်ထုတ်လွှင့်ခြင်းတွင် data ထုတ်လွှင့်ခြင်းများကိုပေးပို့ခြင်းနှင့်လက်ခံခြင်းသည်အချက်အလက်များကိုမှန်ကန်စွာခွဲခြမ်းစိတ်ဖြာရန်သေချာစေရန် protocol format ကိုတင်းကြပ်စွာလိုက်နာရန်လိုအပ်သည်။ PHP မှ PHP မှ POP function သည် Binary Strings သို့ဒေတာများကိုသတ်မှတ်ထားသောပုံစံဖြင့်အချက်အလက်များကိုထည့်သွင်းရန်အထောက်အကူပြုနိုင်သည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်ချက်နှစ်ခုကိုပေါင်းစပ်ပြီးအချက်အလက်ပေးပို့ခြင်းနှင့်အချက်အလက်ပေးပို့ခြင်းကိုနားလည်သဘောပေါက်ရန်ဤလုပ်ဆောင်ချက်နှစ်ခုကိုမည်သို့အသုံးပြုရမည်ကိုရှင်းပြပါမည်။

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

Pack () function သည် PHP variable များကိုသတ်မှတ်ထားသော format code ကို အခြေခံ. binary strings များအဖြစ်ပြောင်းလဲပေးသည်။ ဥပမာအားဖြင့်:

 $data = pack("Nn", 12345, 80);

ဒီမှာ "nn" ကိုဆိုလိုသည်။

  • N : IFFIGNED LIGHITEGER (32-bit, network endianness, i.e. big endianness)

  • N : IFFIGNED တိုတောင်းသောကိန်းတို (16-bit, network endian)

ကွန်ယက်ပေါ်တွင်လွယ်ကူသောဂီယာကိုထုတ်လွှင့်ရန်အတွက် 12345 နှင့် 80 အထုပ်။

2 ။ socket_sendto () function ကိုမိတ်ဆက်ပါ

Socket_sendto () သည်အဓိကအားဖြင့် UDP အတွက်အချက်အလက်များကိုပေးပို့ရန်အတွက်အသုံးပြုသောကြောင့် function signature မှာအောက်ပါအတိုင်းဖြစ်သည် -

 int socket_sendto(resource $socket, string $buf, int $len, int $flags, string $addr, int $port)
  • $ socket_create မှတ ဆင့် ဖန်တီးထားသော socket socket socket socket socket socket socket socket socket socket socket socket

  • $ buf : ပို့ရန်ဒေတာ

  • $ len : ပေးပို့တဲ့ဒေတာအရှည်

  • $ အလံ - အလံကိုများသောအားဖြင့် 0 ကိုသတ်မှတ်ထားသည်

  • $ addr : Destination IP address ကို

  • $ port : ပစ်မှတ်ဆိပ်ကမ်း

3 ။ နမူနာကုဒ် - Pack () နှင့် Socket_sendto နှင့်ပေါင်းစပ်ထားသောအချက်အလက်များကိုပေးပို့ပါ ()

"Message ID" နှင့် "status code" ပါပါ 0 င်သည့် packet ကိုပို့ရန်လိုအပ်ပါသည်, Message ID ကို 4-byte integer အဖြစ်အသုံးပြုသည်။

 <?php
// ဖန်တီး UDP Socket
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
if ($socket === false) {
    die("socket_create() failed: " . socket_strerror(socket_last_error()));
}

// ဒေတာကိုပြင်ဆင်ပါ:အကေြာင်းကြားချက်IDနှင့် status ကုဒ်
$messageId = 1001;  // 4 integer byte
$statusCode = 200;  // 2 integer byte

// အသုံးပြု pack() function ထုပ်ပိုးဒေတာ,ကွန်ယက် byte အမိန့်(Big Endian)
$data = pack("Nn", $messageId, $statusCode);

// ဦး တည်ရာလိပ်စာနှင့်ဆိပ်ကမ်း
$ip = "m66.net";
$port = 12345;

// ဒေတာပို့ပါ
$sent = socket_sendto($socket, $data, strlen($data), 0, $ip, $port);
if ($sent === false) {
    echo "socket_sendto() failed: " . socket_strerror(socket_last_error($socket));
} else {
    echo "အောင်မြင်စွာပို့ခဲ့သည် {$sent} မှ Byte ဒေတာ {$ip}:{$port}\n";
}

// ရုပ်သိမ်းခြင်း socket
socket_close($socket);
?>

4 ။ အကျဉ်းချုပ်

Pack () function ကိုမှတစ်ဆင့်ကျွန်ုပ်တို့သည်အမျိုးမျိုးသောအချက်အလက်အမျိုးအစားများကိုကွန်ယက် protocols လိုအပ်ချက်များနှင့်ကိုက်ညီသော binary format များသို့ပြောင်းလွယ်ပြင်လွယ်နိုင်သည်။ Socket_sendto () တွင်ပေါင်းစပ်ထားသောအချက်အလက်များကိုထိရောက်သောကွန်ယက်ဆက်သွယ်မှုရရှိရန် UDP protocol မှတဆင့်သတ်မှတ်ထားသော server သို့ပို့နိုင်သည်။