• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
تشخیص قطع ارتباط سرور در ارتباط سرور و کلاینت خیلی حیاتی برام راهنمایی لطفا
#1
سلام
خسته نباشید
من دو کد php دارم
اولی server.php
کد پی‌اچ‌پی:
<?php
$host 
"127.0.0.1";
$port 25003;
set_time_limit(0);
try
{

$socket = @socket_create(AF_INETSOCK_STREAM0) or die("Could not create socket\n");

$result = @socket_bind($socket$host$port) or die("Could not bind to socket\n");

$result = @socket_listen($socket3) or die("Could not set up socket listener\n");
$spawn = @socket_accept($socket) or die("Could not accept incoming connection\n");
$input = @socket_read($spawn1024) or die("Could not read input\n");
$input trim($input);
echo 
"Client Message : ".$input;
$output "received";
@
socket_write($spawn$outputstrlen ($output)) or die("Could not write output\n");
socket_close($spawn);
socket_close($socket);
            }
               catch(
Exception $e)
            {
                echo 
'ErrorMessage: ' .$e->getMessage();
            }
            
?>
و دومی client.php
کد پی‌اچ‌پی:
<?php

$host    
"127.0.0.1";
$port    25003;
$message $_GET('message');

$socket = @socket_create(AF_INETSOCK_STREAM0) or die("Error");

$result = @socket_connect($socket$host$port) or die("Could not connect to server");  

@
socket_write($socket$messagestrlen($message)) or die("Could not send data to server");

$result = @socket_read ($socket1024) or die("Could not read server response");
echo 
"Reply From Server  :".$result;

@
socket_close($socket);


?>

که مشاهده میکنید
من دو تا اپ نوشتم که یکی در ویندوز و دیگری در اندروید است
اپ موجود در ویندوز سرور است که فایل server.php را از هاست من اجرا میکند که منتظر جواب از کلاینت شود و پس از دریافت پیغام تحویل را به کلاینت برمیگردونه تا اینجا هیچ مشکلی نیست و اپ موجود در ویندوز و اندروید بخوبی در ارتباط هستن
مشکل از اینجا شروع میشه که به صورت ناگهانی اپ ویندوزی من بسته بشه و یا اینترنت قطع بشه اگر کلاینت پیغامی ارسال کنه پیغام received رو دریافت میکنه[/align]
حال سوال اینجاست چطوری بتونم متوجه این قطع ارتباطی ناگهانی سرور از هاستم بشم تا بجای پیغام received پیغام خطا را ارسال کنم
چیزی که به ذهن خودم رسید این بود که پس از ارسال پیغام توسط کلاینت سه ثانیه کلاینت رو منتظر بذارم و در سرور بگم پس از دریافت پیغام مقدار true رو به هاست من ارسال کند تا در دیتابیس ثبت شود کلاینت هم بعد از تموم شدن 3 ثانیه مقدار تعریف شده در دیتابیس رو چک کنه اگر true بود یعنی توسط سرور دریافت شده در غیر اینصورت خیر
ولی این روش زمان کار افزایش میده و فکر میکنم معایبی داشته باشه

شما چه روشی و راه حلی رو پیشنهاد میکنید واقعا این مشکل برام حیاتی ممنون میشم راهنماییم کنید تشکر
  پاسخ
تشکر شده توسط :
#2
سلام،
اگر اینترنت قطع بشه و یا اسکریپت از کار بیافته، چه‌جوبی سرور پیغام موفقیت (recieved) آمیز ارسال میکنه؟ منطقا باید چیزی ارسال نکنه دیگه؟
غایب
  پاسخ
تشکر شده توسط :
#3
(۱۳۹۶ شهریور ۰۱, ۰۳:۰۱ ب.ظ)Alaa نوشته: سلام،
اگر اینترنت قطع بشه و یا اسکریپت از کار بیافته، چه‌جوبی سرور پیغام موفقیت (recieved) آمیز ارسال میکنه؟ منطقا باید چیزی ارسال نکنه دیگه؟
شما کد Server.php رو نگاه کنید متوجه میشین چرا چون این کدها سمت هاست اجرا میشن و هاست من هست که جواب دریافت به کلاینت میده و پیغام ارسالی از کلاینت رو برای من که در انتظار دریافت بودم echo میکنه وفتی این ارتباط به هردلیلی قطع بشه سرور تا موقع دریافت پیام به پورتی که باز کرده گوش میده و پس از دریافت پیغام received رو ارسال میکنه
  پاسخ
تشکر شده توسط :
#4
یعنی تا الان با php بازی میکردین که کسی جواب این سوال نمیدونست خوبه اینجا انجمن برتر php حتی یه راهنمایی کوچیک هم نشد
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان