سلام
ما برای IP & PORT نیاز به Listener و Reader + یکی که توی این داده ها بنویسه .
برای اینکار ما میایم دو فایل رو فرض میکنیم که یکی فایل در Server اجرا میشه و یکی در Client خب حالا فرض بر این داریم که
اسم فایل ها : server.php & client.php هستش حالا میخوایم باهم یک آموزش ساده رو پیش بریم با توضیحات :
(این کدها رو نمیتونید استفاده کنید چون باید در فایل سرور قسمت socket_read در یک while همیشه true قرار بگیرد تا دائم در حال چک کردن دریافتی ها باشد و سپس میتونید در یک فایل رایت کنید و بخونید در صفحه ای دیگر )
خب کد زیر رو در نظر بگیرید (مربوط به Server.php) :
PHP:
ignore_user_abort(true);
set_time_limit(0);
$host = "127.0.0.1";
$port = 9898;
$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);
$spawn = socket_accept($socket);
$data = socket_read($spawn, 10240) or die("Could not read input\n");
print $data;
socket_close($so
حالا تک تک خط ها رو براتون توضیح میدم ... این کدها مربوط به ساخت و اتصال شدن به IP & PORT ای که اختصاص دادیم میباشد .
( شاید بپرسی IP & PORT باید چی باشه ! خب شما میتونید از آیپی و پورت هاست خودتون استفاده کنید ! جواب هم میده )
من اومدم اول از تابع ignore_user_abort استفاده کردم این تابع کارش اینه که صفحه اگر بسته هم شد توسط کاربر صفحه به کارش ادامه میدهد ( یعنی while که مقدارش را همیشه true دادیم تا زمانی که سرور خاموش یا down شود فعال است )
در خط بعد از set_time_limit استفاده کردم که چون هر لحظه در حال دریافت و ارسال است در مورد time limit مشکلی پیش نیاد که مقدارش را 0 دادیم .
- شاید این سوال براتون پیش بیاد که ممکن هستش مصرف CPU سرور رو بالا ببرید با اینکار ... باید بگم اگر کد نویس حرفه ای باشید میتونید براحتی هدف خودتون رو در چند خط کنترل کرده و بدست بیارید . یعنی چند بایت تکرار تاثیری ندارد در کاره cpu سرور و ...
خب در پایین 2 متغیر تعریف کردیم یکی host که همان IP ما میباشد و یکی PORT که پیشنهاد میکنم پورت بالا 8000 یا 7000 بکار ببرید
اندکی پایینتر به SOCKET_CREATE میرسیم که همان مقدار Domain این تابع آماده سازی شده برای ساخت سوکت . خب بریم سره تنظیمات این تابع . ما اومدیم اول براش AF_INET تعریف کردیم خب این مربوط به نوع آیپی یا بهتر بگم نوع خانواده آیپی هستش که سه نوع امکان تعریف دارد :
AF_INET : IPv4
AF_INET6 : IPv6
AF_UNIX : IPC
مقدار بعدی این تابع SOCKET_STREAM میباشد که همان TYPE این تابع است که شامل 5 نوع است :
SOCK_STREAM : اطلاعات مبتنی برا بایت .
SOCKET_DGRAM : برای UDP Protocol
و ... که میتوانید در آدرس زیر اطلاعات آنرا مشاهده کنید :
http://www.php.net/manual/en/function.socket-create.php
تنظیم بعدی مربوط به نوع پروتکل هستش که استفاده میکنیم :
که خب ما توی کارمون فعلا از TCP استفاده میکنیم .(بستگی به نوع مصرفمون داره) که ما مقدار 0 دادیم .
خب تابع بعدی socket_set_option است که مربوط به تنظیمات سوکت میباشد .
در داده اول باید متغیر SOCKET_CREATE خودمان را معرفی کنیم . در قسمت دوم LEVEL و در قسمت سوم و چهارم OptName و Optval را مشخص کنیم
خب حالا میرسیم به SOCKET_Bind که یه جورایی کاره آماده سازی پروت و آیپی رو داره که وقتی اجرا بشه آنها هم آماده به کار میشوند و آماده مصرف .
(در واقع همان اطلاعات متصل شدن به پورت و آیپی است)
قسمت بعدی از تابع LISTEN استفاده کردیم که کارش گوش کردن چیزهایی هست که ارسال میشود .
قسمت بعد نیز ما سوکت رو accept میکنیم تا برای read آماده باشد .
در انتها نیز read میکنیم و پرینت
فقط این نکته رو فراموش نکنید این کدی که در بالا قرار دادم جنبه آموزشی داره برای استفاده باید socket_accept & socket_read در یک while برابر true قرار گیرد.
شما کافی است فایل سرور را یکبار در سرور خود اجرا کنید و پس از مدتی ببندید فایل خودش آماده به گوش کردن اطلاعات و انجام تغییرات میشود .
* نکته : سرور همیشه باید در حال اجرای همیشگی باشد تا client بتواند اطلاعات ردّ و بدل کند یعنی نمیتوانید قبل از انجام کار client فایل server را باز کنید خیر . زیرا این سرور در این حالت اجرا میشود و بسته و اگر هم while مقدار true داشته باشد که دیگه به client کار نمیکشه .
با تشکر//
BY CarBoN.08 (امیر سلیمانی)