လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Socket_Accept () + stream_socket_cletient_cletient () - ဆာဗာနှင့် 0 န်ဆောင်မှုခံယူသူအကြားဆက်သွယ်မှုတစ်ခုလုံး

Socket_Accept () + stream_socket_cletient_cletient () - ဆာဗာနှင့် 0 န်ဆောင်မှုခံယူသူအကြားဆက်သွယ်မှုတစ်ခုလုံး

M66 2025-05-18

PHP တွင် Socket-based network compacen ည့်သည်သည်အလွန်အမင်းနှင့်ပြောင်းလွယ်ပြင်လွယ်သောဆက်သွယ်ရေးနည်းလမ်းဖြစ်သည်။ ဤဆောင်းပါးသည် Socket_Acception () နှင့် stream_socket_clock_clocktiestient () လုပ်ဆောင်ချက်များကိုရိုးရိုးဗီ - client client ဆက်သွယ်ရေးလုပ်ငန်းစဉ်ကိုမည်သို့အကောင်အထည်ဖော်မည်ကိုသရုပ်ပြပါလိမ့်မည်။

1 ။ အခြေခံအသိပညာမိတ်ဆက်

  • Socket_Accept () - Server Sockets များပေါ်တွင် client connection တောင်းဆိုမှုများကိုအသုံးပြုခြင်းနှင့် client connection ကိုညွှန်ပြရန် socket အရင်းအမြစ်အသစ်ကိုပြန်ပို့ရန်အသုံးပြုသည်။

  • stream_socket_client () - သတ်မှတ်ထားသောဆာဗာ၏ socket နှင့်ချိတ်ဆက်ရန် client connection တစ်ခုဖန်တီးရန်အသုံးပြုသည်။

ဆာဗာသည်ဆိပ်ကမ်းကိုနားထောင်ခြင်းနှင့်ဆက်သွယ်မှုတောင်းဆိုမှုများကိုလက်ခံရန်တာ 0 န်ရှိသည်။ client သည် connection တောင်းဆိုမှုများကိုစတင်သည်နှင့်ဆာဗာသို့ဆက်သွယ်သည်။ ပါတီနှစ်ခုသည်ဆက်သွယ်မှုတစ်ခုတည်ထောင်ပြီးနောက်ဒေတာဖလှယ်မှုကိုပြုလုပ်နိုင်သည်။

2 ။ ဆာဗာ - ဘေးထွက်နမူနာကုဒ်

 <?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);

3 ။ client ကိုနမူနာကုဒ်

 <?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);

4 ။ လုပ်ငန်းစဉ်ခွဲခြမ်းစိတ်ဖြာခြင်း

  1. ဆာဗာ :

    • Socket_create () socket အရင်းအမြစ်များကိုဖန်တီးရန်။

    • အိုင်ပီနှင့်ဆိပ်ကမ်းကိုချည်နှောင်ပြီးနောက် client connection ကိုနားထောင်ရန် call socket_listen () ကိုချည်နှောင် ပြီးနောက်။

    • client client ကိုစောင့်ဆိုင်းရန် socket_accept ကိုသုံးရန် () ကို သုံးပါ။

    • ဆက်သွယ်မှုပြီးနောက် client data and socket_write () ကိုလက်ခံရရှိရန် socket_read () ကို အသုံးပြုပါ။

    • ဆက်သွယ်ရေးကိုဖြည့်စွက်ပြီးပါက client socket ကိုပိတ်ပြီးလာမည့်ဆက်သွယ်မှုကိုဆက်လက်စောင့်ဆိုင်းပါ။

  2. client :

    • server သို့ချိတ်ဆက်ရန် stream_socket_client () ကိုသုံးပါ။

    • ဆက်သွယ်မှုအောင်မြင်ပြီးနောက်ဆာဗာသို့စာတစ်စောင်ပို့ပါ။

    • ဆာဗာမှပြန်လာသောအချက်အလက်များကိုဖတ်ပြီးအပြည့်အဝတောင်းဆိုချက် - တုံ့ပြန်မှုဖြစ်စဉ်ကိုဖြည့်စွက်ပါ။

    • ဆက်သွယ်မှုကိုပိတ်ပါ။


5 ။ မှတ်စုဖို့အရာ

  • ဆာဗာသည် 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 နှင့်အကောင်းဆုံးပြုလုပ်နိုင်သည်။