လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> အတူတကွ socket_listen () အခြေခံကွန်ယက်ဆာဗာတစ်ခုဖန်တီးရန်

အတူတကွ socket_listen () အခြေခံကွန်ယက်ဆာဗာတစ်ခုဖန်တီးရန်

M66 2025-05-28

PHP တွင် Socket Extensions များကိုအသုံးပြုခြင်း, ကွန်ယက်ဆက်သွယ်ရေးလုပ်ဆောင်ချက်များကိုအလွန်ပြောင်းလွယ်ပြင်လွယ်စွာအကောင်အထည်ဖော်နိုင်ပြီးအခြေခံကွန်ရက်ဆာဗာတစ်ခုဖန်တီးရန်ပင်အသုံးပြုနိုင်သည်။ ဤဆောင်းပါးသည် Socket_listen () နှင့် socket_accept_accept_acception () functions များကိုမည်သို့အသုံးပြုရမည်ကိုအာရုံစိုက်မည်။

Socket_listen () နှင့် Socket_accept ()?

  • Socket_listen ()
    ဤလုပ်ဆောင်ချက်သည် IP နှင့် port တစ်ခုဖြင့် client connection တောင်းဆိုမှုကိုစောင့်ဆိုင်းရန် IP နှင့် port တစ်ခုဖြင့် Socket အရင်းအမြစ်ကိုနားထောင်ရန်အသုံးပြုသည်။

  • Socket_Accept ()
    ဤလုပ်ဆောင်ချက်သည် 0 င်ရောက်လာသည့် client connection တောင်းဆိုမှုကိုလက်ခံရန်နှင့် client နှင့်ဆက်သွယ်ရန် societ အရင်းအမြစ်အသစ်ကိုပြန်ပို့ရန်အသုံးပြုသည်။

အခြေခံဖြစ်စဉ်ကိုခွဲခြမ်းစိတ်ဖြာ

  1. Socket Resourt ကိုဖန်တီးပါ ( Socket_create )

  2. IP နှင့် port ကိုချည်နှောင်ခြင်း ( Socket_bind )

  3. Port ( Socket_listen )

  4. 0 န်ဆောင်မှုခံယူသူဆက်သွယ်မှုများကိုကွင်းဆက်။ လက်ခံခြင်း ( socket_accept )

  5. ဒေတာနှင့်ဖြည့်စွက်ဆက်သွယ်ရေးကိုဖတ်ပါ

  6. client client နှင့် server sockets ပိတ်ပါ

နမူနာကုဒ်

 <?php
// ဖန်တီးTCP socket(AF_INETprotocol မိသားစု,ဆဲှးလွဲသည်)
$server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($server === false) {
    die("socket_create() ဆုံးရှုံး: " . socket_strerror(socket_last_error()) . "\n");
}

// ချည်နေှာင်IPနှင့် ports
$address = '0.0.0.0';  // အားလုံးကွန်ယက်မျက်နှာပြင်များနားထောင်ပါ
$port = 8080;
if (!socket_bind($server, $address, $port)) {
    die("socket_bind() ဆုံးရှုံး: " . socket_strerror(socket_last_error($server)) . "\n");
}

// စောင့်ကြည့်လေ့လာရေးစတင်ပါ,ဆက်သွယ်မှုကိုစောင့်ဆိုင်းခွင့်ပြုသည့် fair length သည်5
if (!socket_listen($server, 5)) {
    die("socket_listen() ဆုံးရှုံး: " . socket_strerror(socket_last_error($server)) . "\n");
}

echo "ဆာဗာစတင်သည်,စောင့်ရေှာက် {$address}:{$port}\n";

while (true) {
    // client connection ကိုပိတ်ဆို့ခြင်းနှင့်စောင့်ဆိုင်းခြင်း
    $client = socket_accept($server);
    if ($client === false) {
        echo "socket_accept() ဆုံးရှုံး: " . socket_strerror(socket_last_error($server)) . "\n";
        continue;
    }

    // client မှဒေတာကိုဖတ်ပါ,အများဆုံးဖတ်ပါ1024ဒရယ်
    $input = socket_read($client, 1024);
    if ($input === false) {
        echo "socket_read() ဆုံးရှုံး: " . socket_strerror(socket_last_error($client)) . "\n";
        socket_close($client);
        continue;
    }

    echo "client ကိုဒေတာကိုလက်ခံရရှိခဲ့သည်: $input\n";

    // အချက်အလက်များကိုထုတ်ယူခြင်း - ဤတွင် client ကိုအပေါ်မက်ဆေ့ခ်ျကိုမှရိုးရိုးပြန်ကြားချက်ဖြစ်ပါတယ်
    $response = "မင်္ဂလာပါ,ဖောက်သည်!သင်ပို့သောအချက်အလက်များမှာ:" . trim($input) . "\n";
    socket_write($client, $response, strlen($response));

    // 关闭ဖောက်သည်连接
    socket_close($client);
}

// ဆာဗာကိုပိတ်ပါsocket(များသောအားဖြင့်ငါဒီကိုမသွားဘူး)
socket_close($server);
?>

ဥပမာပြပါ

  • အမှန်တကယ်အသုံးပြုမှုတွင်သင်သည်အပြည့်အဝ protocol parser ကိုအကောင်အထည်ဖော်ခြင်းသို့မဟုတ်ဖောက်သည်မျိုးစုံကိုအကောင်အထည်ဖော်ခြင်းကဲ့သို့သောသင်၏လိုအပ်ချက်များနှင့်အညီဖတ်ရန်နှင့်ယုတ္တိဗေဒကိုရေးနိုင်ပါသည်။

  • နားထောင်သူရဲ့ IP ကိုသတ်သတ်မှတ်မှတ်လိပ်စာတစ်ခုဖွင့်နိုင်ပြီး '0.0.0.0' ကို အသုံးပြု. ရနိုင်သောကွန်ယက်မျက်နှာပြင်အားလုံးကိုနားထောင်နိုင်သည်။

  • Ports ကို ports များကိုထိန်းသိမ်းရန်စနစ်ကို အသုံးပြု. Port နံပါတ်ကို အသုံးပြု. 1024 အထက်ရှိ ports များကိုရွေးချယ်သင့်သည်။

  • အထက်ပါကုဒ်သည်တစ်ပြိုင်တည်းပိတ်ဆို့ထားသော server-threaded server တစ်ခုဖြစ်သည်။

အကျဉ်းချုပ်

Socket_listen () socket_acception ()) , PHP သည် TCP ဆာဗာပရိုဂရမ်များကိုအခြေခံကွန်ယက်ဆက်သွယ်ရေးလုပ်ငန်းများကိုနားလည်သဘောပေါက်ရန်တိုက်ရိုက်တည်ဆောက်နိုင်သည်။ PHP သည်စွမ်းဆောင်ရည်မြင့်မားသောဆာဗာများအတွက်အထူးဒီဇိုင်းပြုလုပ်ထားသောဘာသာစကားမဟုတ်သော်လည်း၎င်းကိုအသေးစား 0 န်ဆောင်မှုများကိုလျင်မြန်စွာရှေ့ပြေးပုံစံဖြင့်သို့မဟုတ်ရိုးရှင်းသောကွန်ယက်အပြန်အလှန်ဆက်သွယ်မှုများပြုလုပ်ရန်၎င်းကိုအသုံးပြုရန်အလွန်လက်တွေ့ကျဆဲဖြစ်သည်။