PHP ၏ Socket_read () တွင်ပရိုဂရမ်းမင်းသည် PHPP ၏ socket များထံမှအချက်အလက်များကိုဖတ်ရှုသည့်ဘုံလုပ်ဆောင်မှုတစ်ခုဖြစ်သည်။ သို့သော်အမှန်တကယ် applications များအနေဖြင့် Socket_read () သည် ကွန်ယက်အခြေအနေများသို့မဟုတ်ဆက်သွယ်မှုပြ problems နာများကြောင့်ကျရှုံးနိုင်သည်။ ပရိုဂရမ်၏တည်ငြိမ်မှုနှင့်ကြံ့ခိုင်မှုကိုသေချာစေရန်အတွက်ကျွန်ုပ်တို့သည်အမှားများကိုအချိန်တိုအတွင်းရှင်းလင်းရန်နှင့်စာဖတ်ခြင်းပျက်ကွက်ပြီးနောက်ထပ်မံကြိုးစားရန်လိုအပ်သည်။ ယခုအချိန်တွင် Socket_Close_Error () function သည်အသုံးဝင်သည်။
ဤဆောင်းပါးသည် Socket_read () နှင့် socket_clear_error () ကို မည်သို့ကိုင်တွယ်ဖြေရှင်းရမည်ကိုအသေးစိတ်ဖော်ပြထားသည်။
Socket_read () ကို ချိတ်ဆက်ထားသော socket မှအချက်အလက်များကို syntax မှအောက်ပါအတိုင်းဖတ်ရန်အသုံးပြုသည်။
socket_read(resource $socket, int $length, int $type = PHP_BINARY_READ): string|false
$ socket : socket အရင်းအမြစ်။
$ အရှည် : ဖတ်ရန် bytes အများဆုံးအရေအတွက်။
$ type : ဖတ်အမျိုးအစား, binary ဖတ်ရန် default ။
ဖတ်ရန်အောင်မြင်လျှင်ဖတ်ပါ။ အကယ်. ၎င်းသည်မအောင်မြင်ပါက မှား လိမ့်မည်။
Socket_read () မအောင်မြင်ပါက, နောက်ဆက်တွဲစစ်ဆင်ရေးကိုအကျိုးသက်ရောက်စေနိုင်သောအမှားအယွင်းတစ်ခုကျန်ရှိနေသေးသည်။ ဥပမာအားဖြင့် Socket_last_Error () သည် နောက်ဆုံးအမှားကုဒ်ကိုပြန်ပို့လိမ့်မည်။ အကယ်. အမှားအယွင်းကိုမရှင်းလင်းပါကပရိုဂရမ်သည်အမှားအယွင်းရှိနိုင်ပြီးထပ်ခါတလဲလဲပျက်ကွက်မှုများဖြစ်ပေါ်စေသည်။
Socket_Close_Error () သည် socient error status ကိုရှင်းလင်းရန်နှင့်နောက်ဆက်တွဲစစ်ဆင်ရေးများကိုပုံမှန်ကွပ်မျက်နိုင်အောင်အသုံးပြုသည်။
အောက်ဖော်ပြပါအချက်သည်အမှားကိုမည်သို့ ရှင်းလင်း ရမည် ,
<?php
// ဖန်တီး socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("ဖန်တီး socket ဆုံးရှုံး: " . socket_strerror(socket_last_error()) . "\n");
}
// ဆာဗာကိုဆက်သွယ်ပါ(ဆာဗာလိပ်စာနှင့်ဆိပ်ကမ်းကိုယူဆပါ)
$server = "m66.net";
$port = 12345;
if (!socket_connect($socket, $server, $port)) {
die("ဆာဗာကိုဆက်သွယ်ပါဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)) . "\n");
}
$maxRetries = 3; // ပြန်လည်ကြိုးစားမှုအများဆုံးအရေအတွက်
$retryCount = 0;
$readLength = 1024;
while ($retryCount < $maxRetries) {
$data = socket_read($socket, $readLength);
if ($data === false) {
// 读取ဆုံးရှုံး,အမှားကုဒ်ကိုရယူပါ
$errorCode = socket_last_error($socket);
$errorMsg = socket_strerror($errorCode);
echo "socket_read ဆုံးရှုံး,အမှားကုဒ်:$errorCode,အမှားသတင်းစကား:$errorMsg\n";
// ရှင်းလင်းသောအမှား
socket_clear_error($socket);
echo "ရှင်းလင်းစေ socket အမှား,ထပ်ကြိုးစားရန်အဆင်သင့်...\n";
$retryCount++;
// မလုပ်မနေရမဟုတ်သော:ခဏအိပ်ပြီးနောက်ထပ်ကြိုးစားပါ,မကြာခဏတောင်းဆိုမှုများကိုရှောင်ကြဉ်ပါ
sleep(1);
continue;
}
// အောင်မြင်စွာဖတ်ပါ,output ကိုဒေတာနှင့်ကွင်းဆက်ထဲကခုန်
echo "ဒေတာကိုဖတ်ပါ:" . $data . "\n";
break;
}
if ($retryCount === $maxRetries) {
echo "ပြန်လည်နေရာချထားမှုအရေအတွက်သည်အများဆုံးရောက်ရှိခဲ့သည်,读取ဆုံးရှုံး。\n";
}
// ရုပ်သိမ်းခြင်း socket
socket_close($socket);
?>
Socket သို့ ဖန်တီး. ချိတ်ဆက်ပါ ။ ဤနေရာတွင် M66.net ဆိပ်ကမ်းနှင့်ချိတ်ဆက်သည်။
အချက်အလက်များကိုဖတ်ရန်ကြိုးစားခြင်း - 3 ယောက်ကိုဖတ်ရန်ကြိုးစားသည်။ 4 င်းတို့ကိုဖတ်ရန်ကြိုးစားသည်။
ပျက်ကွက်ကိုင်တွယ် :
socket_last_Error မှတဆင့်အမှားကုဒ်ကိုရယူပါ။
အမှားဖော်ပြချက်ရရှိရန် Socket_Stror () ကို သုံးပါ။
အမှားအယွင်းကိုရှင်းလင်းရန် Socket_Clear_Error () () ။
နောက်တဖန်မကြိုးစားမီတစ်စက္ကန့်ကိုစောင့်ပါ။
အကယ်. အောင်မြင်စွာဖတ်ရှုနိုင်လျှင်ဒေတာများကိုပုံနှိပ်ထုတ်ဝေပါကကွင်းဆက်မှထွက်ပေါ်လာလိမ့်မည် ။
ဆက်သွယ်မှုကိုပိတ်ပြီးအရင်းအမြစ်ကိုထုတ်လွှတ်ပါ ။
Socket_read ကိုအသုံးပြုပြီးဒေတာကိုဖတ်ပြီး () ကို ရှင်းရှင်းလင်းလင်းဖတ်ရန်မလွယ်ကူပါကပျက်ကွက်မှုမရှိသည့်အခါအမှားကိုရှင်းလင်းရန်မမေ့ပါနှင့်။ ၎င်းသည်အမှားစုဆောင်းခြင်းကိုရှောင်ရှားနိုင်ပြီးနောက်စစ်ဆင်ရေး၏မှန်ကန်သောကွပ်မျက်မှုကိုသေချာစေသည်။ တစ်ချိန်တည်းမှာပင် Retry ယန္တရားနှင့်ပေါင်းစပ်ပြီးကွန်ယက်ဆက်သွယ်မှုတည်ငြိမ်မှုကိုတိုးတက်အောင်လုပ်နိုင်သည်။