سوکت ها برای ارتباط بین پردازشی استفاده می شوند. ارتباطات Interprocess عموما بر اساس مدل client-server است. در اینجا، مشتری-سرور، برنامه هایی است که با یکدیگر ارتباط برقرار می کنند. تعامل بین سرویس گیرنده و سرور نیاز به اتصال دارد. برنامه نویسی سوکت مسئول ایجاد ارتباط بین برنامه ها برای برقراری ارتباط است.

در پایان این قسمت، شمانحوه ایجاد یک سرویس دهنده ساده در PHP را یاد خواهید گرفت. شما همچنین یاد می گیرید که چگونه برنامه کاربردی مشتری، پیام را به سرور ارسال می کند و آن را از همان سرور دریافت می کند.

هدف از این کدهای آموزشی : ایجاد یک مشتری برای ارسال یک پیام رشته به سرور و ایجاد یک سرور برای برگردادن پاسخ همان پیام به مشتری است.

در اینجا کدهای مربوط به برنامه سرور و برنامه کلاینت را بصورت دستور به دستور آموزش خواهیم داد:

برنامه PHP سرور

مرحله 1: تنظیم متغیرهایی مانند “میزبان” و “پورت”

$host = "127.0.0.1";
$port = 5353;
// No Timeout
set_time_limit(0);

شماره پورت می تواند هر عدد صحیح مثبت بین 1024 -65535 باشد.

مرحله 2: ایجاد سوکت

$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");

مرحله 3: اتصال سوکت به پورت و میزبان

در اینجا منبع سوکت ایجاد شده به آدرس IP و شماره پورت محدود می شود.
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");

مرحله 4: شروع به گوش دادن به سوکت

پس از اتصال به IP و سرور پورت منتظر مشتری برای اتصال است. تا آن زمان آن را در انتظار نگه می دارد.
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");

مرحله 5: پذیرش اتصال ورودی

این تابع درخواست اتصال ورودی را در سوکت ایجاد شده قبول می کند. پس از پذیرش اتصال از سوکت مشتری، این تابع یک منبع سوکت دیگری را که در واقع برای ارتباط با سوکت مشتری متناظر است، به ارمغان می آورد. در اینجا “$ spawn” این است که منبع سوکت که مسئول برقراری ارتباط با سوکت مشتری است.
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
تا کنون، سوکت سرور ما را آماده کرده ایم اما اسکریپت در واقع هیچ کاری انجام نمی دهد. با توجه به هدف ذکر شده ما، پیام را از سوکت مشتری خواندن خواهیم آموخت و سپس دوباره پیام متنی را به سوکت مشتری فرستادیم.

مرحله 6: خواندن پیام از سوکت کلاینت

$input = socket_read($spawn, 1024) or die("Could not read input\n");

مرحله 7: پیام را معکوس کنید

$output = strrev($input) . "\n";

مرحله 8: ارسال پیام به سوکت مشتری

socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");

بستن سوکت

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

کد کامل برنامه سرور (server.php)

// set some variables
$host = "127.0.0.1";
$port = 25003;
// don't timeout!
set_time_limit(0);
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");
// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
echo "Client Message : ".$input;
// reverse client input and send back
$output = strrev($input) . "\n";
socket_write($spawn, $output, strlen ($output)) or die("Could not write output\n");
// close sockets
socket_close($spawn);
socket_close($socket);

دستورات بالا برای ایجاد برنامه سرور نوشته شده است در بخش بعدی روش نوشتن برنامه کلاینت برای ارتباط با این برنامه را فرا می گیرید.