လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Socket_export_Stream နှင့် fread လုပ်ဆောင်ချက်များသည်အချက်အလက်များကိုအတူတကွဖတ်ရှုနိုင်သနည်း။ လက်တွေ့ကျတဲ့ဥပမာအသေးစိတ်ရှင်းပြချက်

Socket_export_Stream နှင့် fread လုပ်ဆောင်ချက်များသည်အချက်အလက်များကိုအတူတကွဖတ်ရှုနိုင်သနည်း။ လက်တွေ့ကျတဲ့ဥပမာအသေးစိတ်ရှင်းပြချက်

gitbox 2025-08-30

1 ။ socket_export_stream function ကိုနားလည်ပါ

Socket_Export_Stream function ၏ function သည် Raw Socket Revere_Sock အရင်းအမြစ်ကို standard php stram လုပ်ရပ်များနှင့်သဟဇာတဖြစ်သော stream အရင်းအမြစ်တစ်ခုအဖြစ်ပြောင်းလဲရန်ဖြစ်သည်။ ၎င်းသည်အခြေခံ socket connection ကို team ကဲ့သို့သောစာဖတ်ခြင်းလုပ်ငန်းများနှင့်အတူအလုပ်လုပ်ရန်,

 <span><span>resource </span><span><span class="hljs-title function_ invoke__">socket_export_stream</span></span><span> ( resource </span><span><span class="hljs-variable">$socket</span></span><span> )
</span></span>

Return STACH သည်ပုံမှန်စီးဆင်းမှုအရင်းအမြစ်တစ်ခုဖြစ်သည်။ ထို့ကြောင့်ဒေတာများကိုဖတ်ရန်သို့မဟုတ်ရေးရန်သင် အရူးအမူး , fwe သို့မဟုတ်အခြားစီးပွါးရေးလုပ်ဆောင်မှုများကိုသင်အသုံးပြုနိုင်သည်။

2 ။

free သည် သတ်မှတ်ထားသော bytes ၏အချက်အလက်များကိုဖိုင်ညွှန်ပြသို့မဟုတ်စီးဆင်းမှုမှအချက်အလက်များကိုဖတ်ရန်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ ၎င်းကိုစမ်းချောင်းရှိအချက်အလက်များကိုဖတ်ရန်၎င်းကို fopen , Socket_export_Stream နှင့်မကြာခဏအသုံးပြုသည်။

 <span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">fread</span></span><span> ( resource </span><span><span class="hljs-variable">$handle</span></span><span> , </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span> )
</span></span>

Parametermer

  • $ လက်ကိုင် သည် stream အရင်းအမြစ်တစ်ခုဖြစ်ပြီး socket_export_stream ဖြင့် ပြန်လာသော stream အရင်းအမြစ်တစ်ခုဖြစ်နိုင်သည်။

  • $ အရှည် သည်ဖတ်ရန် bytes အရေအတွက်ဖြစ်သည်။

Fread ဖတ်နေတဲ့အကြောင်းအရာကိုပြန်ပို့ပေးလိမ့်မယ်, ဒေတာကိုဖတ်လို့မရဘူးဆိုရင်အချည်းနှီးသော string ကိုပြန်ပို့လိမ့်မယ်။

3 ။ လက်တွေ့ကျတဲ့ဥပမာ - client နှင့် server အကြားဒေတာဖတ်ရှုခြင်း

ကျွန်ုပ်တို့သည် TCP client ၏ရိုးရှင်းသောဥပမာအားဖြင့်ဆာဗာနှင့်ဆက်သွယ်ပြောဆိုခြင်းကိုဖန်တီးပါမည်။ client သည်ဆာဗာသို့ဆက်သွယ်ပြီး socket မှတဆင့်တောင်းဆိုမှုကိုပေးပို့ပြီးဆာဗာမှတုန့်ပြန်မှုကိုဖတ်ရန် မည်သူကောင်း အသုံးပြုသည်။

3.1 ဆာဗာဘေးထွက်ကုဒ်ဖန်တီးခြင်း

 <span><span><span class="hljs-comment">// ဆာဗာ - ဘေးထွက်ကုဒ်</span></span><span>
</span><span><span class="hljs-variable">$host</span></span><span> = </span><span><span class="hljs-string">'127.0.0.1'</span></span><span>;
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">8080</span></span><span>;

</span><span><span class="hljs-comment">// ဖန်တီး socket ပစ္စည်းအင်းအား</span></span><span>
</span><span><span class="hljs-variable">$server</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_create</span></span><span>(AF_INET, SOCK_STREAM, SOL_TCP);
</span><span><span class="hljs-title function_ invoke__">socket_bind</span></span><span>(</span><span><span class="hljs-variable">$server</span></span><span>, </span><span><span class="hljs-variable">$host</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">socket_listen</span></span><span>(</span><span><span class="hljs-variable">$server</span></span><span>);

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဆာဗာစတင်သည်,client connection ကိုစောင့်ဆိုင်း...\n"</span></span><span>;

</span><span><span class="hljs-comment">// client connection ကိုစောင့်ဆိုင်း</span></span><span>
</span><span><span class="hljs-variable">$client</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_accept</span></span><span>(</span><span><span class="hljs-variable">$server</span></span><span>);

</span><span><span class="hljs-comment">// client ကိုမှဒေတာပေးပို့ပါ</span></span><span>
</span><span><span class="hljs-variable">$message</span></span><span> = </span><span><span class="hljs-string">"Hello from server!"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">socket_write</span></span><span>(</span><span><span class="hljs-variable">$client</span></span><span>, </span><span><span class="hljs-variable">$message</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$message</span></span><span>));

</span><span><span class="hljs-comment">// ဆက်သွယ်မှုကိုပိတ်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$client</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$server</span></span><span>);
</span></span>

3.2 client concern ကိုဖန်တီးခြင်း

 <span><span><span class="hljs-comment">// client ကိုကုဒ်</span></span><span>
</span><span><span class="hljs-variable">$host</span></span><span> = </span><span><span class="hljs-string">'127.0.0.1'</span></span><span>;
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">8080</span></span><span>;

</span><span><span class="hljs-comment">// ဖန်တီး socket ပစ္စည်းအင်းအား</span></span><span>
</span><span><span class="hljs-variable">$socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_create</span></span><span>(AF_INET, SOCK_STREAM, SOL_TCP);
</span><span><span class="hljs-title function_ invoke__">socket_connect</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$host</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>);

</span><span><span class="hljs-comment">// သေတမ်းစာ socket ပစ္စည်းအင်းအား转换为流ပစ္စည်းအင်းအား</span></span><span>
</span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_export_stream</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);

</span><span><span class="hljs-comment">// စမ်းချောင်းမှအချက်အလက်များကိုဖတ်ပါ</span></span><span>
</span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);  </span><span><span class="hljs-comment">// အများဆုံးဖတ်ပါ 1024 byte ဒေတာ</span></span><span>

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဆာဗာတုံ့ပြန်မှု: "</span></span><span> . </span><span><span class="hljs-variable">$response</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;

</span><span><span class="hljs-comment">// ဆက်သွယ်မှုကိုပိတ်ပါ</span></span><span>
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span></span>

4 ။ code ခွဲခြမ်းစိတ်ဖြာ

  • ဆာဗာဘေးထွက်: ပထမ ဦး စွာကျွန်ုပ်တို့သည် TCP socket တစ်ခုကိုဖန်တီးပြီးဒေသဆိုင်ရာလိပ်စာနှင့် port 8080 သို့ခညျြနှောငျ။ ဆာဗာသည် 0 န်ဆောင်မှုခံယူသူကိုချိတ်ဆက်ရန်စောင့်ဆိုင်းနေစဉ်နားထောင်လိမ့်မည်။ client connection တစ်ခုရှိပါက၎င်းသည်ဆက်သွယ်မှုကိုလက်ခံပြီးမက်ဆေ့ခ်ျပို့သည်။ ထို့နောက်ဆက်သွယ်မှုကိုပိတ်လိုက်သည်။

  • Client - Client-client သည် TCP Socket တစ်ခုကိုပထမဆုံးဖန်တီးပြီးဆာဗာသို့ဆက်သွယ်သည်။ ထို့နောက် socket_export_stream ကို socket to stream account to stew to to to socket_export_stream ကိုသုံးပါ။ နောက်တစ်ခုက server ကနေပြန်လာတဲ့ data တွေကို front function မှတဆင့်ဖတ်ပါ။

5 ။ မကြာခဏမေးသောမေးခွန်းများနှင့်ကြိုတင်ကာကွယ်မှုများ

5.1 ဒေတာကိုလုံးဝမဖတ်ပါ

Network Programming တွင်အချက်အလက်များကိုဖတ်ရှုသောအခါမကြာခဏကြုံတွေ့ရသည့်ပြ problem နာသည်အချက်အလက်များကိုစာဖတ်ခြင်းမပြည့်စုံပါ။ ဥပမာအားဖြင့်ဆာဗာမှပေးပို့သောအချက်အလက်ပမာဏသည်တစ်ချိန်တည်းတွင်ဖတ်နေသည့် Bytes အရေအတွက်ထက်များစွာပိုကြီးနိုင်သည်။ ဒေတာအားလုံးကိုဖတ်မဖတ်မချင်းအချက်အလက်များကိုရှာဖွေရန်လိုအပ်သည်။

 <span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-keyword">while</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">feof</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>)) {
    </span><span><span class="hljs-variable">$chunk</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fread</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-number">1024</span></span><span>);  </span><span><span class="hljs-comment">// တစ်ခုချင်းစီကိုဖတ်ပါ 1024 ဒရယ်</span></span><span>
    </span><span><span class="hljs-variable">$response</span></span><span> .= </span><span><span class="hljs-variable">$chunk</span></span><span>;
}
</span></span>

5.2 Non-blocking mode ကို

PHP Socket သည်ပုံမှန်အားဖြင့်ပိတ်ဆို့ခြင်းသည် ပုံမှန်အား ဖြင့်ပိတ်ဆို့ခြင်း, အချက်အလက်များကိုပိတ်ဆို့ခြင်းမပြုရန်သင်ဖတ်ရှုရန်လိုအပ်ပါက socket_set_nonblock ကို ပိတ်ထား နိုင်သည်။

 <span><span><span class="hljs-title function_ invoke__">socket_set_nonblock</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span></span>

6 ။ အကျဉ်းချုပ်

Socket_export_Stream နှင့် free forms များမှတဆင့် Socket Data Streams များကိုပိုမိုလွယ်ကူစွာအသုံးပြုနိုင်သည်။ ဤလုပ်ဆောင်ချက်နှစ်ခုကိုဖိုင်စီးကိုကိုင်တွယ်ခြင်းကဲ့သို့ဝေးလံသောဆာဗာမှကွန်ယက်အချက်အလက်များကိုဖတ်ရှုရန်ခွင့်ပြုရန်အသုံးပြုနိုင်သည်။ အမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်မှုတွင်ဤချဉ်းကပ်နည်းသည်အချိန်နှင့်တပြေးညီနှင့်စဉ်ဆက်မပြတ်ဒေတာအပြန်အလှန်ဆက်သွယ်မှုကိုကိုင်တွယ်ရန်အလွန်သင့်လျော်သည်။

ဤဆောင်းပါး၏နမူနာများမှဥပမာများကဤလုပ်ငန်းဆောင်တာများကိုအမှန်တကယ်ဖွံ့ဖြိုးတိုးတက်စေရန်နှင့် Sockets မှရရှိသောလုပ်ငန်းစဉ်အချက်အလက်များအတွက်မည်သို့ပေါင်းစပ်ရမည်ကိုပိုမိုနားလည်ရန်မျှော်လင့်ပါသည်။