လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ဒေတာသမာဓိကာကွယ်စောင့်ရှောက်ရေးတွင် Socket_set_Set_Block ၏လျှောက်လွှာ

ဒေတာသမာဓိကာကွယ်စောင့်ရှောက်ရေးတွင် Socket_set_Set_Block ၏လျှောက်လွှာ

gitbox 2025-05-26

Socket_set_Block ဆိုတာဘာလဲ

Socket_set_block သည် Socket ကိုပိတ်ဆို့ခြင်းကိုပိတ်ထားရန် socket ကိုသတ်မှတ်ထားသည့် PHP Socket extate တွင် function တစ်ခုဖြစ်သည်။ Blocking Mode ကိုရည်ညွှန်းသည့် mode သည်ဖတ်ရှုခြင်းနှင့်ရေးခြင်းလုပ်ငန်းများကိုလုပ်ဆောင်သောအခါ, ဒေတာအဆင်သင့်မဖြစ်သေးပါကအချက်အလက်များကိုဆက်မလုပ်မီအဆင်သင့်မဖြစ်သေးသည့်အထိအစီအစဉ်သည်စောင့်ဆိုင်းလိမ့်မည်။ အတော်လေးပိတ်ဆို့ခြင်းမဟုတ်သော mode သည်အချက်အလက်များအဆင်သင့်ဖြစ်လျှင်ဖြစ်စေချက်ချင်းပြန်လာလိမ့်မည်။

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

 bool socket_set_block ( resource $socket )

ဤလုပ်ဆောင်ချက်၏ parameter သည် socket အရင်းအမြစ်ဖြစ်သည်။ အောင်မြင်မှုအတွက်အောင်မြင်မှုနှင့် ပျက်ကွက် ပြီးနောက်ခေါ်ဆိုမှုသည် အမှန်ပင် ပြန်လည်ရောက်ရှိလာသည်။


ပိတ်ဆို့ခြင်း mode ကို အသုံးပြု. ဒေတာသမာဓိကိုသေချာစေရန်စိတ်ကူးများ

ဒေတာကိုဖတ်သည့်အခါ Socket သည်ပိတ်ဆို့နေသည်ဆိုပါက Socket_read သည် ဒေတာကိုဖတ်သည်အထိသို့မဟုတ်ဆက်သွယ်မှုကိုပိတ်ထားသည်အထိစောင့်ဆိုင်းလိမ့်မည်။ ကွင်းဆက်စာဖတ်ခြင်းနှင့်အရှည်တရားစီရင်ခြင်းကိုပေါင်းစပ်ခြင်းအားဖြင့်အချက်အလက်အားလုံးကိုနဂိုအတိုင်းဖတ်ရန်သေချာစေနိုင်သည်။

ဘုံအတွေးအခေါ်များသည်အောက်ပါအတိုင်းဖြစ်သည် -

  1. mode ကိုပိတ်ဆို့ရန် Socket ကိုထားပါ။

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

  3. ဒေတာပြီးပြည့်စုံစေရန်သေချာစေရန်ဖတ်ရန်အချက်အလက်အားလုံးကို splice ။


နမူနာကုဒ်သရုပ်ပြ

ဒေတာသမာဓိရှိရန် Socket_set_Block ကို မည်သို့အသုံးပြုရမည်ကိုပြသသောရိုးရှင်းသော client-side ဖတ်ရှုခြင်းဆိုင်ရာအချက်အလက်ဥပမာဖြစ်သည်။

 <?php
$host = "gitbox.net";
$port = 8080;

// ဖန်တီး TCP Sockets
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    die("socket_create failed: " . socket_strerror(socket_last_error()));
}

// ဆာဗာကိုဆက်သွယ်ပါ
if (!socket_connect($socket, $host, $port)) {
    die("socket_connect failed: " . socket_strerror(socket_last_error($socket)));
}

// ပိတ်ဆို့ခြင်း mode ကို set,သေချာအောင်လုပ်ပါ socket_read ဒေတာများအတွက်စောင့်ဆိုင်းပိတ်ဆို့ခြင်း
socket_set_block($socket);

$totalData = '';
$expectedLength = 1024; // ကျနော်တို့ဖတ်ရန်မျှော်လင့်ထားဆိုပါစို့ 1024 byte ဒေတာ
$bytesRead = 0;

while ($bytesRead < $expectedLength) {
    $buffer = socket_read($socket, $expectedLength - $bytesRead);
    if ($buffer === false) {
        die("socket_read failed: " . socket_strerror(socket_last_error($socket)));
    }
    if ($buffer === '') {
        // ဆက်သွယ်မှုပိတ်
        break;
    }
    $totalData .= $buffer;
    $bytesRead += strlen($buffer);
}

// 关闭Sockets
socket_close($socket);

// အပြည့်အဝဒေတာ output ကို
echo "ပြည့်စုံသောဒေတာကိုလက်ခံရရှိခဲ့သည်:\n";
echo $totalData;
?>

code parsing

  • TCP socket တစ်ခုဖန်တီးရန် Socket_create ကို အသုံးပြုပါ။

  • ဆာဗာနှင့်ဆက်သွယ်ပါ, လိပ်စာရှိဒိုမိန်းအမည်ကို GitBox.net ဖြင့်အစားထိုးသည်။

  • Socket_set_block ကို အသုံးပြုပါ။

  • မျှော်မှန်းထားသော bytes အရေအတွက်ကိုဖတ်ရန်သို့မဟုတ်ဆက်သွယ်မှုကိုပိတ်ထားသည်အထိဒေတာများကိုဖတ်ရှုရန်ကွင်းဆက်ကိုရိုက်ထည့်ပါ။

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

  • နောက်ဆုံးအပြည့်အဝဒေတာ output ကိုဖြစ်ပါတယ်။


မှတ်သားရန်အရာ

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

  • ဒေတာများကိုဖတ်သည့်အခါအချက်အလက်နယ်နိမိတ်သတ်မှတ်ချက်ကို protocol ဒီဇိုင်းအတိုင်းစီရင်သင့်သည်။ ဤဥပမာတွင်ပုံသေသတ်မှတ်ထားသောစာဖတ်ခြင်းကိုယူဆသည်။

  • ပိုမိုရှုပ်ထွေးသော protocols များအတွက် data packet header နှင့်ပေါင်းစပ်။ data packet header နှင့်ပေါင်းစပ်ပြီးအရှည်ကိုသတ်မှတ်နိုင်သည်။ ပထမ ဦး ဆုံး packet header ကိုဖတ်ပါ။