Socket_set_block သည် Socket ကိုပိတ်ဆို့ခြင်းကိုပိတ်ထားရန် socket ကိုသတ်မှတ်ထားသည့် PHP Socket extate တွင် function တစ်ခုဖြစ်သည်။ Blocking Mode ကိုရည်ညွှန်းသည့် mode သည်ဖတ်ရှုခြင်းနှင့်ရေးခြင်းလုပ်ငန်းများကိုလုပ်ဆောင်သောအခါ, ဒေတာအဆင်သင့်မဖြစ်သေးပါကအချက်အလက်များကိုဆက်မလုပ်မီအဆင်သင့်မဖြစ်သေးသည့်အထိအစီအစဉ်သည်စောင့်ဆိုင်းလိမ့်မည်။ အတော်လေးပိတ်ဆို့ခြင်းမဟုတ်သော mode သည်အချက်အလက်များအဆင်သင့်ဖြစ်လျှင်ဖြစ်စေချက်ချင်းပြန်လာလိမ့်မည်။
ပိတ်ဆို့ခြင်း mode သည်အချက်အလက်များဖတ်ရှုသောအခါအချက်အလက်များကိုဖတ်ရန်,
bool socket_set_block ( resource $socket )
ဤလုပ်ဆောင်ချက်၏ parameter သည် socket အရင်းအမြစ်ဖြစ်သည်။ အောင်မြင်မှုအတွက်အောင်မြင်မှုနှင့် ပျက်ကွက် ပြီးနောက်ခေါ်ဆိုမှုသည် အမှန်ပင် ပြန်လည်ရောက်ရှိလာသည်။
ဒေတာကိုဖတ်သည့်အခါ Socket သည်ပိတ်ဆို့နေသည်ဆိုပါက Socket_read သည် ဒေတာကိုဖတ်သည်အထိသို့မဟုတ်ဆက်သွယ်မှုကိုပိတ်ထားသည်အထိစောင့်ဆိုင်းလိမ့်မည်။ ကွင်းဆက်စာဖတ်ခြင်းနှင့်အရှည်တရားစီရင်ခြင်းကိုပေါင်းစပ်ခြင်းအားဖြင့်အချက်အလက်အားလုံးကိုနဂိုအတိုင်းဖတ်ရန်သေချာစေနိုင်သည်။
ဘုံအတွေးအခေါ်များသည်အောက်ပါအတိုင်းဖြစ်သည် -
mode ကိုပိတ်ဆို့ရန် Socket ကိုထားပါ။
မျှော်မှန်းထားသော bytes အရေအတွက်ကိုဖတ်ရန်သို့မဟုတ်ဆက်သွယ်မှုပြတ်တောက်သွားသည်အထိအချက်အလက်များကိုကွင်းဆက်တစ်ခုမှတစ်ဆင့်စဉ်ဆက်မပြတ်ဖတ်ရှုနိုင်သည်။
ဒေတာပြီးပြည့်စုံစေရန်သေချာစေရန်ဖတ်ရန်အချက်အလက်အားလုံးကို 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;
?>
TCP socket တစ်ခုဖန်တီးရန် Socket_create ကို အသုံးပြုပါ။
ဆာဗာနှင့်ဆက်သွယ်ပါ, လိပ်စာရှိဒိုမိန်းအမည်ကို GitBox.net ဖြင့်အစားထိုးသည်။
Socket_set_block ကို အသုံးပြုပါ။
မျှော်မှန်းထားသော bytes အရေအတွက်ကိုဖတ်ရန်သို့မဟုတ်ဆက်သွယ်မှုကိုပိတ်ထားသည်အထိဒေတာများကိုဖတ်ရှုရန်ကွင်းဆက်ကိုရိုက်ထည့်ပါ။
အချက်အလက်များကိုမဆုံးရှုံးစေရန်သေချာစေရန်ဖတ်ရန်အချက်အလက်များကို စုစုပေါင်းဒေါ်လာစုစုပေါင်း သို့ခွဲထားသည်။
နောက်ဆုံးအပြည့်အဝဒေတာ output ကိုဖြစ်ပါတယ်။
ပိတ်ဆို့ခြင်းသည်စာဖတ်စဉ်ကာလအတွင်းခေတ္တရပ်တန့်ရန်နှင့်စောင့်ဆိုင်းခြင်းဖြစ်နိုင်သည်။ ကွန်ယက်သည်မတည်ငြိမ်ပါက program သည်ဖြည်းဖြည်းချင်းတုံ့ပြန်နိုင်သည်။ အမှန်တကယ် applications များ၌သင့်လျော်သောအချိန်ကိုသတ်မှတ်ရန်အကြံပြုသည်။
ဒေတာများကိုဖတ်သည့်အခါအချက်အလက်နယ်နိမိတ်သတ်မှတ်ချက်ကို protocol ဒီဇိုင်းအတိုင်းစီရင်သင့်သည်။ ဤဥပမာတွင်ပုံသေသတ်မှတ်ထားသောစာဖတ်ခြင်းကိုယူဆသည်။
ပိုမိုရှုပ်ထွေးသော protocols များအတွက် data packet header နှင့်ပေါင်းစပ်။ data packet header နှင့်ပေါင်းစပ်ပြီးအရှည်ကိုသတ်မှတ်နိုင်သည်။ ပထမ ဦး ဆုံး packet header ကိုဖတ်ပါ။