PHP တွင် Socket-based network compacen ည့်သည်သည်အလွန်အမင်းနှင့်ပြောင်းလွယ်ပြင်လွယ်သောဆက်သွယ်ရေးနည်းလမ်းဖြစ်သည်။ ဤဆောင်းပါးသည် Socket_Acception () နှင့် stream_socket_clock_clocktiestient () လုပ်ဆောင်ချက်များကိုရိုးရိုးဗီ - client client ဆက်သွယ်ရေးလုပ်ငန်းစဉ်ကိုမည်သို့အကောင်အထည်ဖော်မည်ကိုသရုပ်ပြပါလိမ့်မည်။
Socket_Accept () - Server Sockets များပေါ်တွင် client connection တောင်းဆိုမှုများကိုအသုံးပြုခြင်းနှင့် client connection ကိုညွှန်ပြရန် socket အရင်းအမြစ်အသစ်ကိုပြန်ပို့ရန်အသုံးပြုသည်။
stream_socket_client () - သတ်မှတ်ထားသောဆာဗာ၏ socket နှင့်ချိတ်ဆက်ရန် client connection တစ်ခုဖန်တီးရန်အသုံးပြုသည်။
ဆာဗာသည်ဆိပ်ကမ်းကိုနားထောင်ခြင်းနှင့်ဆက်သွယ်မှုတောင်းဆိုမှုများကိုလက်ခံရန်တာ 0 န်ရှိသည်။ client သည် connection တောင်းဆိုမှုများကိုစတင်သည်နှင့်ဆာဗာသို့ဆက်သွယ်သည်။ ပါတီနှစ်ခုသည်ဆက်သွယ်မှုတစ်ခုတည်ထောင်ပြီးနောက်ဒေတာဖလှယ်မှုကိုပြုလုပ်နိုင်သည်။
<?php
// ဖန်တီးTCP socketဆာဗာဘက်,သတ်မှတ်ထားသော port ကိုနားထောင်ပါ
$host = '0.0.0.0'; // အားလုံးနားထောင်ပါIP
$port = 12345;
// ဖန်တီးsocketပစ္စည်းအင်းအား
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$socket) {
die("ဖန်တီးsocketဆုံးရှုံး: " . socket_strerror(socket_last_error()));
}
// ချည်နေှာင်IPနှင့် ports
if (!socket_bind($socket, $host, $port)) {
die("ချည်နေှာင်socketဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)));
}
// စောင့်ကြည့်လေ့လာရေးစတင်ပါ
if (!socket_listen($socket, 5)) {
die("စောင့်ရေှာက်socketဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)));
}
echo "ဆာဗာဘက်启动,စောင့်ရေှာက် {$host}:{$port}\n";
while (true) {
// client ဆက်သွယ်မှုကိုလက်ခံပါ
$clientSocket = socket_accept($socket);
if ($clientSocket === false) {
echo "接受ဆက်ဆုံးရှုံး: " . socket_strerror(socket_last_error($socket)) . "\n";
continue;
}
// client ကိုမှပေးပို့သောအချက်အလက်များကိုဖတ်ပါ
$input = socket_read($clientSocket, 1024);
echo "တစ် ဦး client ကိုမက်ဆေ့ခ်ျကိုလက်ခံရရှိခဲ့သည်: " . trim($input) . "\n";
// client ကိုတစ် ဦး တုံ့ပြန်မှုပေးပို့ပါ
$response = "ဆာဗာသည်စာတစ်စောင်လက်ခံရရှိခဲ့သည်:" . $input;
socket_write($clientSocket, $response, strlen($response));
// Client Convice Connection
socket_close($clientSocket);
}
socket_close($socket);
<?php
$host = 'm66.net'; // မေးခွန်းကလိုအပ်သောဒိုမိန်းအမည်နှင့်အစားထိုးပါ
$port = 12345;
// ဖန်တီး客户端socketဆက်
$client = stream_socket_client("tcp://{$host}:{$port}", $errno, $errstr, 5);
if (!$client) {
die("ဆက်服务器ဆုံးရှုံး: $errstr ($errno)\n");
}
// 向ဆာဗာဘက်发送数据
$message = "မင်္ဂလာပါ,ဆာဗာဘက်!";
fwrite($client, $message);
// 读取ဆာဗာဘက်响应
$response = fread($client, 1024);
echo "ဆာဗာဘက်响应: " . trim($response) . "\n";
// 关闭ဆက်
fclose($client);
ဆာဗာ :
Socket_create () socket အရင်းအမြစ်များကိုဖန်တီးရန်။
အိုင်ပီနှင့်ဆိပ်ကမ်းကိုချည်နှောင်ပြီးနောက် client connection ကိုနားထောင်ရန် call socket_listen () ကိုချည်နှောင် ပြီးနောက်။
client client ကိုစောင့်ဆိုင်းရန် socket_accept ကိုသုံးရန် () ကို သုံးပါ။
ဆက်သွယ်မှုပြီးနောက် client data and socket_write () ကိုလက်ခံရရှိရန် socket_read () ကို အသုံးပြုပါ။
ဆက်သွယ်ရေးကိုဖြည့်စွက်ပြီးပါက client socket ကိုပိတ်ပြီးလာမည့်ဆက်သွယ်မှုကိုဆက်လက်စောင့်ဆိုင်းပါ။
client :
server သို့ချိတ်ဆက်ရန် stream_socket_client () ကိုသုံးပါ။
ဆက်သွယ်မှုအောင်မြင်ပြီးနောက်ဆာဗာသို့စာတစ်စောင်ပို့ပါ။
ဆာဗာမှပြန်လာသောအချက်အလက်များကိုဖတ်ပြီးအပြည့်အဝတောင်းဆိုချက် - တုံ့ပြန်မှုဖြစ်စဉ်ကိုဖြည့်စွက်ပါ။
ဆက်သွယ်မှုကိုပိတ်ပါ။
ဆာဗာသည် Socket_ * စီးရီးလုပ်ဆောင်ချက်များကိုအသုံးပြုသည်။ client သည် stream_socket_client () ကို အသုံးပြုသည်။ အောက်ခြေရှိ Socket Relections ကိုနှစ် ဦး စလုံးသည်အောက်ခြေရှိစက်မြစ်များတပ်ဆင်ထားသော်လည်း interface style များသည်ကွဲပြားခြားနားသည်။ နမူနာများကို PHP တွင်ဘုံအဖုံးအသုံးပြုမှုကိုပြသရန်အတူတကွအသုံးပြုကြသည်။
ထုတ်လုပ်မှုပတ်ဝန်းကျင်တွင် Socket Read နှင့် Error Error Handling နှင့် Error Handling နှင့် Timeout ထိန်းချုပ်မှုကိုထည့်သွင်းသင့်သည်။
အကယ်. ဆာဗာကို cloud server သို့မဟုတ် intranet တွင်တပ်ဆင်ထားပါကဆိပ်ကမ်းကိုဖွင့်ရန်နှင့် Domain Name M66.net Name M66.NET resolution ကိုမှန်ကန်စွာဖော်ပြရန်လိုအပ်သည်။
sociece socket_accept () သည်ပိတ်ဆို့ခြင်းခေါ်ဆိုမှုတစ်ခုဖြစ်ပြီးတစ်ခုတည်းသောဆက်သွယ်မှုဥပမာတစ်ခုအတွက်သင့်တော်သည်။ အမှန်တကယ်စီမံကိန်းများတွင်၎င်းကို multi-threaded, multi-process သို့မဟုတ် allynchronous io နှင့်အကောင်းဆုံးပြုလုပ်နိုင်သည်။