PHP တွင် socket_recvmsg နှင့် socket_cmsg_space လုပ်ဆောင်ချက်များကိုများသောအားဖြင့် socket ဆက်သွယ်ရေးကိုကိုင်တွယ်ရန်အသုံးပြုသည်။ ကွန်ယက်နှင့်သက်ဆိုင်သောမက်ဆေ့ခ်ျများကိုကျွန်ုပ်တို့လုပ်ဆောင်ရန်လိုအပ်သည့်အခါကျွန်ုပ်တို့သည်မက်ဆေ့ခ်ျခေါင်းစီးများ, ဒေတာနှင့်ဆက်စပ်သောထိန်းချုပ်မှုဆိုင်ရာအချက်အလက်များကိုမကြာခဏလုပ်ဆောင်ရန်လိုအပ်သည်။ Socket_recvMsg function ကိုဒေတာကိုလက်ခံရရှိရန်နှင့်၎င်းကိုမက်ဆေ့ခ်ျကြားခံတွင်သိမ်းဆည်းရန်အသုံးပြုနိုင်ပြီး Control Information ၏နေရာအရွယ်အစားကို socket_cmsg_space မှတဆင့်တွက်ချက်နိုင်သည်။ မက်ဆေ့ခ်ျနေရာကိုထိထိရောက်ရောက်တွက်ချက်ရန်ဤလုပ်ဆောင်ချက်နှစ်ခုကိုပေါင်းစပ်ရန်ဤဆောင်းပါးသည်ဤဆောင်းပါးသည်အသေးစိတ်ရှင်းပြပါလိမ့်မည်။
Socket_recvMsg function သည် PHP တွင်ကွန်ယက်မက်ဆေ့ခ်ျများလက်ခံရရှိရန် PHP တွင်အခြေခံ socket function တစ်ခုဖြစ်သည်။ ၎င်းသည်ဒေတာများကိုသာလက်ခံရရှိရုံသာမကမက်ဆေ့ခ်ျများနှင့်သက်ဆိုင်သောထိန်းချုပ်မှုဆိုင်ရာအချက်အလက်များကိုလည်းလုပ်ဆောင်နိုင်သည်။ ၎င်း၏ function ရှေ့ပြေးပုံစံအောက်ပါအတိုင်းဖြစ်သည် -
socket_recvmsg($socket, $message, $flags);
$ socket : ဒေတာကိုလက်ခံရရှိရန်လိုအပ်သော socket ။
$ Message : စတိုးဆိုင်များကိုလက်ခံရရှိသည့်စတိုးဆိုင်များကိုလက်ခံရရှိသည့်ဒေတာများပါ 0 င်သောအချက်အလက်များ။
အလံများ - အချက်အလက်များကိုရရှိသောအလံသည်များသောအားဖြင့်ကိန်းဂဏန်းများကိုလက်ခံရရှိသည့်အလံကို msg_peek စသည်ဖြင့်ကွဲပြားခြားနားသောအလံများကိုသတ်မှတ်နိုင်သည်။
Socket_cMsg_space function ကိုမက်ဆေ့ခ်ျများလက်ခံရရှိသည့်အခါလိုအပ်သောနေရာကိုတွက်ချက်ရန်အသုံးပြုသည်။ ၎င်းကိုများသောအားဖြင့် Control Information ၏အရွယ်အစားကိုတွက်ချက်ရန်အသုံးပြုသည်။ ကျွန်ုပ်တို့သည်လက်ခံရရှိထားသောမက်ဆေ့ခ်ျများအတွက်နေရာအလုံအလောက်ခွဲဝေချထားပေးရန်သေချာစေသည်။ ရှေ့ပြေးပုံစံသည်အောက်ပါအတိုင်းဖြစ်သည် -
socket_cmsg_space($level, $type);
$ အဆင့် - မက်ဆေ့ခ်ျထိန်းချုပ်မှုအဆင့်, များသောအားဖြင့် sol_socket ကဲ့သို့သော protocol level တွင်။
$ type : So_rcvbuf ကဲ့သို့သောမက်ဆေ့ခ်ျအမျိုးအစားကိုထိန်းချုပ်သည်။
ဤလုပ်ဆောင်ချက်နှစ်ခုကိုပေါင်းစပ်ပြီးအသုံးပြုသောအခါကျွန်ုပ်တို့သည်မျှော်လင့်ထားသည့်ထိန်းချုပ်မှုမက်ဆေ့ခ်ျကိုတွက်ချက်ရန် socket_cmsg_space ကို ဦး စွာအသုံးပြုရန်လိုအပ်သည်။ နောက်တစ်ခုကအချက်အလက်များကို socket_recvmsg မှတဆင့်အချက်အလက်များကိုလက်ခံရရှိပြီးအချက်အလက်များကိုထိန်းချုပ်ရန်နှင့်ထိန်းချုပ်မှုအချက်အလက်များကိုသိမ်းဆည်းရန်လုံလောက်သောမှတ်ဉာဏ်ကိုခွဲဝေချထားနိုင်သည်။
<?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);
?>
အပေါ်ကဥပမာမှာ UDP socket ကိုအရင်ဖန်တီးပြီးဆိပ်ကမ်းကိုချည်ထားတယ်။ ထို့နောက်ကျွန်ုပ်တို့သည် Control Information ရရှိရန်လိုအပ်သောနေရာကိုတွက်ချက်ရန် socket_cmsg_space function ကို အသုံးပြု. ဤနေရာအပေါ် အခြေခံ. စုစုပေါင်းကြားခံအရွယ်အစားကိုတွက်ချက်ရန် socket_cmsg_space function ကိုအသုံးပြုသည်။ နောက်ဆုံးတွင်ဒေတာများကိုလက်ခံရရှိရန် Socket_recvMsg function ကို သုံး. ၎င်းကို $ မက်ဆေ့ခ်ျကို variable တွင်သိမ်းထားပါ။
Socket_recvmsg နှင့် Socket_cmsg_space ကိုပေါင်းစပ်ခြင်းအားဖြင့်ကွန်ယက်အချက်အလက်များကိုလက်ခံရရှိသည့်အခါဒေတာနှင့်ထိန်းချုပ်မှုအချက်အလက်များကိုသိမ်းဆည်းရန်နေရာအလုံအလောက်ရှိနိုင်သည်။ Socket_cMsg_space function သည်အထူးအသုံး 0 င် သည် ။ ဤလုပ်ဆောင်ချက်နှစ်ခုသည်ကျွန်ုပ်တို့အားအခြေခံကွန်ယက်ဆက်သွယ်မှုကိုပိုမိုပြောင်းလွယ်ပြင်လွယ်နှင့်ထိရောက်စွာစီမံရန်ခွင့်ပြုရန်ပေါင်းစပ်နိုင်သည်။
အကယ်. သင်သည် Socket Communications အတွက်လိုအပ်ချက်ပိုမိုများပြားလာပါကဤလုပ်ဆောင်ချက်နှစ်ခုသည်သင့်အားပိုမိုကောင်းမွန်သောလက်ခံခြင်းနှင့်လုပ်ငန်းစဉ်ကိုပိုမိုကောင်းမွန်စွာလက်ခံနိုင်ကြောင်းနားလည်ရန်နားလည်ပါ။