مقدمه ایی بر PHP Socket کاملا مبتدی
سلام دوستان لازم بود سوکت رو از یک جایی شروع کنم و تست بگیرم و ببینم تا اینکه متوجه بشم ، این نمونه برای شروع خیلی خوب هست
خب قبل از هرچیز لازم هست که تنظیمات زیر رو انجام بدید < حتما افزونه سوکت رو روی PHP فعال کنید
لازم هست ورژن PHP رو بدونید
با توجه به ورژن PHP لازم هست PHP.ini رو برای فعال شدن و درست کارکردن سرور ویرایش کنید ، پس با توجه به ورژن PHP برای من آدرس PHP.INI بصورت زیر میشه :
C:\wamp\bin\php\php5.3.13
عبارت زیر رو سرچ کنید :
extension=php_sockets.dll
حتما سمیکالن ";" قبل از این خط رو بردارید و یک بار Wamp رو "Restart All Service" کنید
کد های سرور به صورت زیر میشه از اونجایی که این فقط مقدمه ایی بر PHP Socket هست بهتر هست این موارد رو بصورت کلیشه ایی در نظر بگیریم ، ولی همچنان توضیحات مختصری میدم برای host یک IP برای سرور هست برای post بهتر هست یک پورت بالاتر از 7000 انتخاب کنید که احتمال خالی بودن اون بالا باشه
سرور :
<?php
//ignore_user_abort(true);
//set_time_limit(0);
$host = "0.0.0.0";
$port = 8888;
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socket, $host, $port);
socket_listen($socket);
while(true){
$spawn = socket_accept($socket);
$data = socket_read($spawn, 10240) or die("Could not read input\n");
$load = file_get_contents('test.txt');
file_put_contents('./test.txt',$load.$data);
}
socket_close($socket);
?>
در رابطه با متد socket_create پارامتر اول AF_INET هست به معنی اینکه نوع IP برابر با IPv4 هست در مورد Option ها اطلاهات کافی ندارم اما به ساده ترین شکل ممکن باید به صورت بالا باشه، میتونید خودتون سرچ کنید socket_bind و socket_listen هم که مشخص هست بعد از ساخته شدن سرور لازم هست همیشه اون رو به حالت Listen قرار بدیم که از یک While استفاده میکنیم بعد از دریافت اطلاعات از طرف کلاینت اونهارو درون یک فایل متنی به اسم test.txt قرار میدیم
کلاینت :
<?php
//set_time_limit(0);
if(isset($_GET['msg'])){
$sendmsg = $_GET['msg']."\n";
} else {
$sendmsg = "MyData ";
}
$host = "127.0.0.1";
$port = 8888;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n");
$connect = socket_connect($socket, $host, $port);
socket_write($socket, $sendmsg,strlen($sendmsg));
socket_close($socket);
?>
قسمت اول Client رو بصورتی مینویسیم که بشه بصورت Get به لینک اطلاعات ارسال کرد ، درواقع میشه گفت داریم از طریق این URL با سرور چت میکنیم ، در قسمت دوم IP و PORT قرار داده شده که IP باید IP سرور باشه و PORT هم باید همون PORT باشه
شما میتونید بجای استفاده از 127.0.0.1 از IP لوکال استفاده کنید ، در این صورت میتونید سوکت رو از طریق گوشی و سیستم های دیگه هم برقرار و اطلاعات رو ارسال کنید
حتما دقت کنید در کنار فایل client.php , server.php فایل test.txt بصورت خالی هم قرار بدید
برای اجرا شدن سرور باید بصورت زیر اون رو اجرا کنید :
در مورد خطوطی که در Client , Server کامنت شده بعدا توضیح میدم <<
اگر وسط کار به نتیجه نرسیدید و به مشکل برخوردید موارد زیر رو بدقت انجام بدید :
از طریق localhost وارد آدرسی بشید که فایل ها شما در اون قرار داره
1 . ابتدا لینک Server.php را در تب جدید باز کنید سپس دستور زیر را در CMD وارد کنید
php -q server.php
بعد از اون لینک Client.php رو در تب جدید باز کنید ، میبینید که حجم test.txt از 0 تبدیل به 1 میشه
در ادامه شما میتونید با ارسال اطلاعات بصورت GET به Client.php اونهارو وارد test.txt کنید
در مورد کامنت هایی که برای Client و Server قرار داره این هست که
ignore_user_abort(true);
برای این هست که server.php حتی بعد از بسته شدن تب توسط کاربر باز هم به کار خودش ادامه بده
set_time_limit(0);
شاید در حین تست متوجه شده باشید که گاهی سرور به از کار میافتاد و Client شما نمیتونست اطلاعات رو ارسال کنه ، دلیل از مار افتادن سرور زمان وقفه و TimeOut بود که با این خط مشکل بهتر میشه
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .