PHP ကို အသုံးပြု. ပရိုဂရမ်းမင်းကွန်ရက်များက socket_recv ကို ချိတ်ဆက်ထားသော socket မှအချက်အလက်များကိုဖတ်ရန်အများအားဖြင့်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ သို့သော်တစ်ခါတစ်ရံကျွန်ုပ်တို့သည် society_recv ကို ခေါ်ဆိုခြင်းမခံရသည့်အခြေအနေများမရရှိသည့်အခြေအနေများကိုမရရှိနိုင်သည့်အခြေအနေများမတွေ့ရသေးပါ။ ဤဆောင်းပါးသည်ဤအခြေအနေ၏ဖြစ်နိုင်ချေရှိသောအကြောင်းရင်းများကိုနက်နက်နဲနဲခွဲခြမ်းစိတ်ဖြာပြီးသက်ဆိုင်ရာဖြေရှင်းနည်းများပေးလိမ့်မည်။
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, 'gitbox.net', 80);
$buffer = '';
$bytes = socket_recv($socket, $buffer, 2048, 0);
if ($bytes === false) {
echo "socket_recv အမှား: " . socket_strerror(socket_last_error($socket));
} elseif ($bytes === 0) {
echo "ဆက်သွယ်မှုပိတ်ထားသည်,အဘယ်သူမျှမဒေတာ reception ည့်ခံ";
} else {
echo "ခံယူ {$bytes} byte ဒေတာ: " . $buffer;
}
socket_close($socket);
ဤနေရာတွင် $ bytes ၏ပြန်လာတန်ဖိုးကိုအပေါ်အာရုံစူးစိုက်မှုဖြစ်ပါတယ်:
အပြုသဘောဆောင်သောကိန်း - ဒေတာကိုအောင်မြင်စွာလက်ခံရရှိခဲ့ပြီး Bytes အရေအတွက်ကိုညွှန်ပြသည်။
0: အခြားပါတီသည်ဆက်သွယ်မှုကိုပိတ်ထားပြီးအချက်အလက်မရှိပါ။
False : အမှားတစ်ခုဖြစ်ပွားခဲ့သည်။
ဒါကအသုံးအများဆုံးအခြေအနေပါ။ သက်တူရွယ်တူ (server သို့မဟုတ် client ကို) သည်မည်သည့်ဒေတာကိုမဆိုမပို့ပါက Socket_recv သည် အကြောင်းအရာကိုသဘာဝကျကျမရရှိနိုင်ပါ။ Network Programming တွင်နှစ်ဖက်စလုံးသည်သဘောတူညီချက်နှင့်အညီအချက်အလက်များကိုတင်းကြပ်စွာပေးပို့ရမည်။
Socket_Connect ဟုခေါ်သော်လည်းဆက်သွယ်မှုကိုအလယ်အလတ်ကွန်ယက်ကိရိယာမှအမှန်တကယ်ထူထောင်ခြင်းသို့မဟုတ်ပိတ်ဆို့ခြင်းမပြုနိုင်ပါ။ ယခုအချိန်တွင်ဖတ်ရန်စစ်ဆင်ရေးသည်အချက်အလက်မပြန်နိုင်ပါ။
Socket_recv ကို ခေါ်ဆိုသည့်အခါကြားခံအရှည်သည်သေးငယ်လွန်းပါကစာဖတ်ခြင်းအလံသတ်မှတ်ချက်များသည်မမှန်ကန်ပါကအချက်အလက်များကိုမဖတ်နိုင်ပါ။
ပိတ်ဆို့ခြင်း mode တွင် socket_recv သည် မပြန်မီရောက်ရှိရန်အချက်အလက်များကိုစောင့်ဆိုင်းလိမ့်မည်။
ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင် socket_recv သည် ချက်ချင်းပြန်လာလိမ့်မည် (သို့) မှားယွင်းစွာဖတ်ရန်အချက်အလက်များမရှိပါက (ပတ် 0 န်းကျင်တွင်မူတည်သည်)
ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုမှန်ကန်စွာပြုပြင်မွမ်းမံပါက၎င်းသည်အချက်အလက်များအနေဖြင့်အဘယ်သူမျှမအချက်အလက်များအဖြစ်မှားယွင်းစွာတုံ့ပြန်နိုင်သည်။
မမျှော်လင့်သောအဆက်ပြတ်ခြင်းသို့မဟုတ်ကွန်ယက်ခြွင်းချက်များသည် socket_recv ကို 0 င်သို့ 0 င်သို့ 0 င်ခွင့်ပြုရန်နှင့်အချက်အလက်များကိုမရနိုင်ပါ။
ချိတ်ဆက်မှုနှင့်ဒေတာလွှဲပြောင်းခြင်းကို Wireshark သို့မဟုတ်ရိုးရှင်းသော command line tool toldbox.net 80 စသည့် Pack-subs command toldboard.net 80 စသည့် Pack-subbbing tools များကို အသုံးပြု. စမ်းသပ်နိုင်သည်။
သတ်သတ်မှတ်မှတ်အမှားသတင်းအချက်အလက်များကိုလေ့လာရန် Socket_Last_Error () နှင့် Socket_SteRror () () () ကို သုံးပါ။
$errorCode = socket_last_error($socket);
if ($errorCode !== 0) {
echo "Socket အမှား码: {$errorCode},အမှား信息:" . socket_strerror($errorCode);
}
သင့်လျော်သောကြားခံအရွယ်အစားကိုသေချာစွာအသုံးပြုရန်နှင့်အလံများကိုဖတ်ပါ။ Buffer Size ကိုယေဘုယျအားဖြင့် 1024-8192 bytes ဖြစ်ရန်အကြံပြုပါသည်။
ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုအသုံးပြုပါကပိတ်ဆို့ခြင်း mode ကိုစစ်ဆေးရန်ပြန်ပြောင်းနိုင်သည်။
socket_set_block($socket);
ရေရှည်ပိတ်ဆို့ခြင်းသို့မဟုတ်ဒေတာပြည်နယ်မပါ 0 င်သောအချက်အလက်များ,
Socket_recv ၏အရင်းအမြစ်အကြောင်းအရင်းသည်အချက်အလက်များကိုလက်ခံခြင်းမဟုတ်သည့်အချက်အလက်များကိုလက်ခံခြင်းမဟုတ်ပါ။ ဆက်သွယ်မှုအခြေအနေကိုကျိုးကြောင်းဆီလျော်စွာစစ်ဆေးခြင်းအားဖြင့်ပိတ်ဆို့ခြင်း mode နှင့် network transmission setting setting setting, ပြ problems နာများကိုထိထိရောက်ရောက်ရှာဖွေတွေ့ရှိနိုင်သည်။ လူနာ debugging သည် Network Programming တွင်သော့ချက်ဖြစ်သည်။ အခြေခံ protocol ကိုနားလည်ခြင်းနှင့်ဒေတာစီးဆင်းမှုလုပ်ငန်းစဉ်ကိုနားလည်ခြင်းသည်ဖွံ့ဖြိုးတိုးတက်မှုထိရောက်မှုကိုများစွာတိုးတက်စေနိုင်သည်။