PDA

View Full Version : برنامه نویسی شبکه در PHP



Pedram77
یک شنبه 09 فروردین 1394, 21:28 عصر
سلام من یسری اطلاعات کم از برنامه نویسی شبکه دارم که براتون مینویسم. لطفا اگه اطلاعات بیشتری دارید بنویسید. :لبخندساده:
یکی از امکانات مهم PHP که من تصادفی بهش برخوردم برنامه نویسی شبکه بود که یسری توابع کامل برای این کار پیدا کردم. به وسیله این توابع میشه به سرعت با Client ارتباط بر قرار کرد.
یه برنامه ساده مینویسم که کداشو تحلیل میکنم :


$host = "127.0.0.1";
$port = 1377;
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
$result = socket_bind($socket, $host, $port);
$result = socket_listen($socket, 3);
$spawn = socket_accept($socket);
$input = socket_read($spawn, 1024);
$input = trim($input);
$output = strlen($input) . "\n";
socket_write($spawn, $output, strlen ($output));
socket_close($spawn);
socket_close($socket);

این برنامه به وسیله یک پورت از کلاینت یه متن دریافت میکند و تعداد کاراکتر هایش را نمایش میدهد.

و اما تحلیل برنامه :



$host = "127.0.0.1";
$port = 1377;

اول آدرس سرور رو توی متغیر $host قرار میدیم و یک پورت برای ارتباط تعیین میکنیم (از 1 تا 65535).



set_time_limit(0);

ارتباط برنامه هیچگاه نباید قطع شود. با این تابع تا اتصال به کلاینت برنامه کار میکند.



$socket = socket_create(AF_INET, SOCK_STREAM, 0);

با این تابع این سوکت میسازیم که ستون اصلی برنامه ست. پارامتر اول برای سوکت یک پروتوکل (!) تعریف میکند. AF_INET مخفف AddressFamily_Internet میباشد. پارامتر بعدی نوع ارتباط را مشخص میکند اتصال گرا یا غیر اتصال گرا (TCP/UDP) که توضیحش خارج از بحثه. SOCK_STREAM سوکت را TCP تعریف میکند، برای نوع غیر اتصال گرا از ثابت SOCK_DGRAM استفاده میشود. پارامتر سوم به سوکت میگوید فقط از TCP استفاده کن.



$result = socket_bind($socket, $host, $port);

بعد از ساخت سوکت نوبت به Bind (ضمیمه) کردن آدرس و پورت است که با تابع بالا صورت میگیرد.



$result = socket_listen($socket, 3);

پس از ضمیمه کردن آدرس و پورت به سوکت، موقع گوش دادن به پورت برای دریافت درخواست ارسال توسط کلاینت است.



$spawn = socket_accept($socket);

بعد از ارسال درخواست توسط کلاینت با این تابع در خواست پذیرفته میشود.



$input = socket_read($spawn, 1024);

هر زمان کلاینت روی پورت اطلاعات را قرار دهد، تابع بالا آن آن اطلاعات را میخواند.



$input = trim($input);
$output = strlen($input) . "\n";

کد بالا طول رشته دریافت شده را در متغیر output قرار میدهد.




socket_write($spawn, $output, strlen ($output));


تابع بالا طول رشته را به کلاینت نمایش میدهد (مقدار را روی پورت قرار میدهد).



socket_close($spawn);
socket_close($socket);

کد بالا سوکت ها را میبندد.

من منبع فارسی برای این مبحث پیدا نکردم لطفا اگه چیزی پیدا کردید یه خبر بدید. :لبخند:

abolfazl-z
دوشنبه 10 فروردین 1394, 00:01 صبح
منبع فارسی !

بفرمایید

http://barnamenevis.org/showthread.php?398613-%DB%8C%DA%A9-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%B3%D8%A7%D8%AF%D9%87-%DA%A9%D8%A7%D8%B1-%D8%A8%D8%A7-%D8%B3%D9%88%DA%A9%D8%AA-%D9%BE%D8%B1%D9%88%DA%AF%D8%B1%D9%85%DB%8C%D9%86%D A%AF&p=1769535#post1769535

reza_alie
دوشنبه 10 فروردین 1394, 18:44 عصر
http://ashiyane.org/forums/showthread.php?24527-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%B3%D9%88%DA%A9%D8%AA-(socket)