လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Socket_Recvmsg နှင့်ပေါင်းစပ်။ မက်ဆေ့ခ်ျကိုအာကာသတွက်ချက်ရန် socket_cmsg_space ကိုသုံးပါ

Socket_Recvmsg နှင့်ပေါင်းစပ်။ မက်ဆေ့ခ်ျကိုအာကာသတွက်ချက်ရန် socket_cmsg_space ကိုသုံးပါ

gitbox 2025-05-28

PHP တွင် socket_recvmsg နှင့် socket_cmsg_space လုပ်ဆောင်ချက်များကိုများသောအားဖြင့် socket ဆက်သွယ်ရေးကိုကိုင်တွယ်ရန်အသုံးပြုသည်။ ကွန်ယက်နှင့်သက်ဆိုင်သောမက်ဆေ့ခ်ျများကိုကျွန်ုပ်တို့လုပ်ဆောင်ရန်လိုအပ်သည့်အခါကျွန်ုပ်တို့သည်မက်ဆေ့ခ်ျခေါင်းစီးများ, ဒေတာနှင့်ဆက်စပ်သောထိန်းချုပ်မှုဆိုင်ရာအချက်အလက်များကိုမကြာခဏလုပ်ဆောင်ရန်လိုအပ်သည်။ Socket_recvMsg function ကိုဒေတာကိုလက်ခံရရှိရန်နှင့်၎င်းကိုမက်ဆေ့ခ်ျကြားခံတွင်သိမ်းဆည်းရန်အသုံးပြုနိုင်ပြီး Control Information ၏နေရာအရွယ်အစားကို socket_cmsg_space မှတဆင့်တွက်ချက်နိုင်သည်။ မက်ဆေ့ခ်ျနေရာကိုထိထိရောက်ရောက်တွက်ချက်ရန်ဤလုပ်ဆောင်ချက်နှစ်ခုကိုပေါင်းစပ်ရန်ဤဆောင်းပါးသည်ဤဆောင်းပါးသည်အသေးစိတ်ရှင်းပြပါလိမ့်မည်။

1 ။ မိတ်ဆက်ရန် socket_recvmsg နှင့် socket_cmsg_space ကို မိတ်ဆက်ပါ

Socket_recvmsg function ကို

Socket_recvMsg function သည် PHP တွင်ကွန်ယက်မက်ဆေ့ခ်ျများလက်ခံရရှိရန် PHP တွင်အခြေခံ socket function တစ်ခုဖြစ်သည်။ ၎င်းသည်ဒေတာများကိုသာလက်ခံရရှိရုံသာမကမက်ဆေ့ခ်ျများနှင့်သက်ဆိုင်သောထိန်းချုပ်မှုဆိုင်ရာအချက်အလက်များကိုလည်းလုပ်ဆောင်နိုင်သည်။ ၎င်း၏ function ရှေ့ပြေးပုံစံအောက်ပါအတိုင်းဖြစ်သည် -

 socket_recvmsg($socket, $message, $flags);
  • $ socket : ဒေတာကိုလက်ခံရရှိရန်လိုအပ်သော socket ။

  • $ Message : စတိုးဆိုင်များကိုလက်ခံရရှိသည့်စတိုးဆိုင်များကိုလက်ခံရရှိသည့်ဒေတာများပါ 0 င်သောအချက်အလက်များ။

  • အလံများ - အချက်အလက်များကိုရရှိသောအလံသည်များသောအားဖြင့်ကိန်းဂဏန်းများကိုလက်ခံရရှိသည့်အလံကို msg_peek စသည်ဖြင့်ကွဲပြားခြားနားသောအလံများကိုသတ်မှတ်နိုင်သည်။

Socket_cMsg_space function ကို

Socket_cMsg_space function ကိုမက်ဆေ့ခ်ျများလက်ခံရရှိသည့်အခါလိုအပ်သောနေရာကိုတွက်ချက်ရန်အသုံးပြုသည်။ ၎င်းကိုများသောအားဖြင့် Control Information ၏အရွယ်အစားကိုတွက်ချက်ရန်အသုံးပြုသည်။ ကျွန်ုပ်တို့သည်လက်ခံရရှိထားသောမက်ဆေ့ခ်ျများအတွက်နေရာအလုံအလောက်ခွဲဝေချထားပေးရန်သေချာစေသည်။ ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -

 socket_cmsg_space($level, $type);
  • $ အဆင့် - မက်ဆေ့ခ်ျထိန်းချုပ်မှုအဆင့်, များသောအားဖြင့် sol_socket ကဲ့သို့သော protocol level တွင်။

  • $ type : So_rcvbuf ကဲ့သို့သောမက်ဆေ့ခ်ျအမျိုးအစားကိုထိန်းချုပ်သည်။

2 ။ socket_recvmsg နှင့် socket_cmsg_space နှင့်ပေါင်းစပ်အသုံးပြုပါ

ဤလုပ်ဆောင်ချက်နှစ်ခုကိုပေါင်းစပ်ပြီးအသုံးပြုသောအခါကျွန်ုပ်တို့သည်မျှော်လင့်ထားသည့်ထိန်းချုပ်မှုမက်ဆေ့ခ်ျကိုတွက်ချက်ရန် socket_cmsg_space ကို ဦး စွာအသုံးပြုရန်လိုအပ်သည်။ နောက်တစ်ခုကအချက်အလက်များကို socket_recvmsg မှတဆင့်အချက်အလက်များကိုလက်ခံရရှိပြီးအချက်အလက်များကိုထိန်းချုပ်ရန်နှင့်ထိန်းချုပ်မှုအချက်အလက်များကိုသိမ်းဆည်းရန်လုံလောက်သောမှတ်ဉာဏ်ကိုခွဲဝေချထားနိုင်သည်။

2.1 နမူနာကုဒ်

 <?php
// socket တစ်ခုဖန်တီးပါ
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);

// ဆိပ်ကမ်း binding
socket_bind($socket, '0.0.0.0', 12345);

// မက်ဆေ့ခ်ျ၏ထိန်းချုပ်မှုသတင်းအချက်အလက်တွက်ချက်ရန်လိုအပ်သောအာကာသ
$level = SOL_SOCKET;
$type = SO_RCVBUF;
$control_space = socket_cmsg_space($level, $type);

// မက်ဆေ့ခ်ျများလက်ခံရရှိရန်လိုအပ်သော buffer အာကာသတွက်ချက်
$buffer_size = 1024 + $control_space;

// မက်ဆေ့ခ်ျကြားခံတစ်ခုဖန်တီးပါ
$message = socket_cmsg_space($level, $type);
$buffer = str_repeat("\0", $buffer_size);

// အသုံးပြု socket_recvmsg ဒေတာကိုလက်ခံရရှိသည်
$bytes_received = socket_recvmsg($socket, $message, 0);

// လက်ခံရရှိဒေတာကို process
if ($bytes_received !== false) {
    echo "ခံယူ $bytes_received byte ဒေတာ: " . bin2hex($message) . PHP_EOL;
} else {
    echo "ဒေတာကိုလက်ခံရရှိသည်失败: " . socket_strerror(socket_last_error($socket)) . PHP_EOL;
}

// Socket ကိုပိတ်ပါ
socket_close($socket);
?>

2.2 ရှင်းပြချက်

အပေါ်ကဥပမာမှာ UDP socket ကိုအရင်ဖန်တီးပြီးဆိပ်ကမ်းကိုချည်ထားတယ်။ ထို့နောက်ကျွန်ုပ်တို့သည် Control Information ရရှိရန်လိုအပ်သောနေရာကိုတွက်ချက်ရန် socket_cmsg_space function ကို အသုံးပြု. ဤနေရာအပေါ် အခြေခံ. စုစုပေါင်းကြားခံအရွယ်အစားကိုတွက်ချက်ရန် socket_cmsg_space function ကိုအသုံးပြုသည်။ နောက်ဆုံးတွင်ဒေတာများကိုလက်ခံရရှိရန် Socket_recvMsg function ကို သုံး. ၎င်းကို $ မက်ဆေ့ခ်ျကို variable တွင်သိမ်းထားပါ။

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

Socket_recvmsg နှင့် Socket_cmsg_space ကိုပေါင်းစပ်ခြင်းအားဖြင့်ကွန်ယက်အချက်အလက်များကိုလက်ခံရရှိသည့်အခါဒေတာနှင့်ထိန်းချုပ်မှုအချက်အလက်များကိုသိမ်းဆည်းရန်နေရာအလုံအလောက်ရှိနိုင်သည်။ Socket_cMsg_space function သည်အထူးအသုံး 0 င် သည် ။ ဤလုပ်ဆောင်ချက်နှစ်ခုသည်ကျွန်ုပ်တို့အားအခြေခံကွန်ယက်ဆက်သွယ်မှုကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်နှင့်ထိရောက်စွာစီမံရန်ခွင့်ပြုရန်ပေါင်းစပ်နိုင်သည်။

အကယ်. သင်သည် Socket Communications အတွက်လိုအပ်ချက်ပိုမိုများပြားလာပါကဤလုပ်ဆောင်ချက်နှစ်ခုသည်သင့်အားပိုမိုကောင်းမွန်သောလက်ခံခြင်းနှင့်လုပ်ငန်းစဉ်ကိုပိုမိုကောင်းမွန်စွာလက်ခံနိုင်ကြောင်းနားလည်ရန်နားလည်ပါ။