آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مقدمه ایی بر PHP Socket کاملا مبتدی

Criss  8 سال پیش  8 سال پیش
+9 0

سلام دوستان لازم بود سوکت رو از یک جایی شروع کنم و تست بگیرم و ببینم تا اینکه متوجه بشم ، این نمونه برای شروع خیلی خوب هست

خب قبل از هرچیز لازم هست که تنظیمات زیر رو انجام بدید < حتما افزونه سوکت رو روی 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  کامنت شده بعدا توضیح میدم <<

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Criss  8 سال پیش
+1 0

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

از طریق localhost وارد آدرسی بشید که فایل ها شما در اون قرار داره

1 . ابتدا لینک Server.php را در تب جدید باز کنید سپس دستور زیر را در CMD وارد کنید

php -q server.php

بعد از اون لینک Client.php رو در تب جدید باز کنید ، میبینید که حجم test.txt از 0 تبدیل به 1 میشه

در ادامه شما میتونید با ارسال اطلاعات بصورت GET به Client.php اونهارو وارد test.txt کنید

پاسخ به سوال 
Criss  8 سال پیش
+1 0

در مورد کامنت هایی که برای Client و Server قرار داره این هست که

ignore_user_abort(true); 

برای این هست که server.php حتی بعد از بسته شدن تب توسط کاربر باز هم به کار خودش ادامه بده

set_time_limit(0); 

شاید در حین تست متوجه شده باشید که گاهی سرور به از کار میافتاد و Client شما نمیتونست اطلاعات رو ارسال کنه ، دلیل از مار افتادن سرور زمان وقفه و TimeOut بود که با این خط مشکل بهتر میشه

+1 0
ممنون لطفن ادامه بده . اگه سورس هم قرار بدی عالی میشه (8 سال پیش)
0 0
سلام میشه دقیقا بگید سوکت کارش چیه؟ (8 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .