လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> [Socket_recv ဘာတွေဖြစ်နေတာလဲ။ ဖြစ်နိုင်သည့်အကြောင်းရင်းကိုခွဲခြမ်းစိတ်ဖြာခြင်း

[Socket_recv ဘာတွေဖြစ်နေတာလဲ။ ဖြစ်နိုင်သည့်အကြောင်းရင်းကိုခွဲခြမ်းစိတ်ဖြာခြင်း

gitbox 2025-06-09

PHP ကို ​​အသုံးပြု. ပရိုဂရမ်းမင်းကွန်ရက်များက socket_recv ကို ချိတ်ဆက်ထားသော socket မှအချက်အလက်များကိုဖတ်ရန်အများအားဖြင့်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ သို့သော်တစ်ခါတစ်ရံကျွန်ုပ်တို့သည် society_recv ကို ခေါ်ဆိုခြင်းမခံရသည့်အခြေအနေများမရရှိသည့်အခြေအနေများကိုမရရှိနိုင်သည့်အခြေအနေများမတွေ့ရသေးပါ။ ဤဆောင်းပါးသည်ဤအခြေအနေ၏ဖြစ်နိုင်ချေရှိသောအကြောင်းရင်းများကိုနက်နက်နဲနဲခွဲခြမ်းစိတ်ဖြာပြီးသက်ဆိုင်ရာဖြေရှင်းနည်းများပေးလိမ့်မည်။


1 ။ socket_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 : အမှားတစ်ခုဖြစ်ပွားခဲ့သည်။


2 ။ socket_recv ဒေတာကိုလက်ခံရရှိမထားသည့်အဘယ်ကြောင့်ဖြစ်နိုင်သောအကြောင်းပြချက်

1 ။ သက်တူရွယ်တူဒေတာကိုမပို့ပါဘူး

ဒါကအသုံးအများဆုံးအခြေအနေပါ။ သက်တူရွယ်တူ (server သို့မဟုတ် client ကို) သည်မည်သည့်ဒေတာကိုမဆိုမပို့ပါက Socket_recv သည် အကြောင်းအရာကိုသဘာဝကျကျမရရှိနိုင်ပါ။ Network Programming တွင်နှစ်ဖက်စလုံးသည်သဘောတူညီချက်နှင့်အညီအချက်အလက်များကိုတင်းကြပ်စွာပေးပို့ရမည်။

2 ။ ဆက်သွယ်မှုကိုအောင်မြင်စွာထူထောင်နိုင်ခြင်းမရှိသေးပါ

Socket_Connect ဟုခေါ်သော်လည်းဆက်သွယ်မှုကိုအလယ်အလတ်ကွန်ယက်ကိရိယာမှအမှန်တကယ်ထူထောင်ခြင်းသို့မဟုတ်ပိတ်ဆို့ခြင်းမပြုနိုင်ပါ။ ယခုအချိန်တွင်ဖတ်ရန်စစ်ဆင်ရေးသည်အချက်အလက်မပြန်နိုင်ပါ။

3 ။ Buffer ချိန်ညှိချက်များကိုဖတ်ပါသို့မဟုတ်မသင့်လျော်စွာဖတ်ရှုခြင်း

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

4 ။ ပိတ်ဆို့ခြင်းနှင့်ပိတ်ဆို့ခြင်းမဟုတ်သော modes များ၏အကျိုးသက်ရောက်မှုများ

  • ပိတ်ဆို့ခြင်း mode တွင် socket_recv သည် မပြန်မီရောက်ရှိရန်အချက်အလက်များကိုစောင့်ဆိုင်းလိမ့်မည်။

  • ပိတ်ဆို့ခြင်းမဟုတ်သော mode တွင် socket_recv သည် ချက်ချင်းပြန်လာလိမ့်မည် (သို့) မှားယွင်းစွာဖတ်ရန်အချက်အလက်များမရှိပါက (ပတ် 0 န်းကျင်တွင်မူတည်သည်)

ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုမှန်ကန်စွာပြုပြင်မွမ်းမံပါက၎င်းသည်အချက်အလက်များအနေဖြင့်အဘယ်သူမျှမအချက်အလက်များအဖြစ်မှားယွင်းစွာတုံ့ပြန်နိုင်သည်။

5 ။ ကွန်ယက်ချွင်းချက်သို့မဟုတ်ဆက်သွယ်မှုကိုပိတ်ထားသည်

မမျှော်လင့်သောအဆက်ပြတ်ခြင်းသို့မဟုတ်ကွန်ယက်ခြွင်းချက်များသည် socket_recv ကို 0 င်သို့ 0 င်သို့ 0 င်ခွင့်ပြုရန်နှင့်အချက်အလက်များကိုမရနိုင်ပါ။


3 ။ debugging နှင့်ဖြေရှင်းချက်အကြံပြုချက်များ

1 ။ သက်တူရွယ်တူသည်ပုံမှန်အားဖြင့်ဒေတာများကိုပေးပို့ခြင်းရှိမရှိစစ်ဆေးပါ

ချိတ်ဆက်မှုနှင့်ဒေတာလွှဲပြောင်းခြင်းကို Wireshark သို့မဟုတ်ရိုးရှင်းသော command line tool toldbox.net 80 စသည့် Pack-subs command toldboard.net 80 စသည့် Pack-subbbing tools များကို အသုံးပြု. စမ်းသပ်နိုင်သည်။

2 ။ Socket status နှင့်အမှားကုဒ်ကိုစစ်ဆေးပါ

သတ်သတ်မှတ်မှတ်အမှားသတင်းအချက်အလက်များကိုလေ့လာရန် Socket_Last_Error () နှင့် Socket_SteRror () () () ကို သုံးပါ။

 $errorCode = socket_last_error($socket);
if ($errorCode !== 0) {
    echo "Socket အမှား码: {$errorCode},အမှား信息:" . socket_strerror($errorCode);
}

3 ။ Read Mode နှင့် parameters တွေကိုအတည်ပြုပါ

သင့်လျော်သောကြားခံအရွယ်အစားကိုသေချာစွာအသုံးပြုရန်နှင့်အလံများကိုဖတ်ပါ။ Buffer Size ကိုယေဘုယျအားဖြင့် 1024-8192 bytes ဖြစ်ရန်အကြံပြုပါသည်။

4 ။ ပိတ်ဆို့ခြင်း mode ကို set

ပိတ်ဆို့ခြင်းမဟုတ်သော mode ကိုအသုံးပြုပါကပိတ်ဆို့ခြင်း mode ကိုစစ်ဆေးရန်ပြန်ပြောင်းနိုင်သည်။

 socket_set_block($socket);

5 ။ အချိန်ကုန်ခြင်းနှင့်ပြန်ကြိုးစားပါ

ရေရှည်ပိတ်ဆို့ခြင်းသို့မဟုတ်ဒေတာပြည်နယ်မပါ 0 င်သောအချက်အလက်များ,


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

Socket_recv ၏အရင်းအမြစ်အကြောင်းအရင်းသည်အချက်အလက်များကိုလက်ခံခြင်းမဟုတ်သည့်အချက်အလက်များကိုလက်ခံခြင်းမဟုတ်ပါ။ ဆက်သွယ်မှုအခြေအနေကိုကျိုးကြောင်းဆီလျော်စွာစစ်ဆေးခြင်းအားဖြင့်ပိတ်ဆို့ခြင်း mode နှင့် network transmission setting setting setting, ပြ problems နာများကိုထိထိရောက်ရောက်ရှာဖွေတွေ့ရှိနိုင်သည်။ လူနာ debugging သည် Network Programming တွင်သော့ချက်ဖြစ်သည်။ အခြေခံ protocol ကိုနားလည်ခြင်းနှင့်ဒေတာစီးဆင်းမှုလုပ်ငန်းစဉ်ကိုနားလည်ခြင်းသည်ဖွံ့ဖြိုးတိုးတက်မှုထိရောက်မှုကိုများစွာတိုးတက်စေနိုင်သည်။