بدست آوردن نام کلاینتی که Disconnect شده
با سلام
من دارو یه برنامه با ClientSocket و ServerSocket می نویسم که چند تا کلاینت به سرور متصل می شن.
این کلاینتها مشخصاتشون تو یک لیست قرار می کیره. در این لیست :
ServerSocket1.Socket.Connections
که تعداد کلاینتهای متصل هم از : ServerSocket1.Socket.ActiveConnections بدست می آد.
وقتی کلاینتی Disconnect بشه رویداد OnClientDisconnect در سرور اجرا می شه.
می خواستم بدونم چطور میشه فهمید کدوم کلاینت DC شده. یعنی چطور می تونم اندیس کلاینتی که DC شده رو تو همون لیست سرور که عرض کردم بدست بیارم.
ممنون می شم اگه راهنماییم کنین.
با تشکر قبلی.
نقل قول: بدست آوردن نام کلاینتی که Disconnect شده
از دوستان کسی نمی تونه کمکم کنه؟؟
ممنون می شم اگه راهنماییم کنید.
نقل قول: بدست آوردن نام کلاینتی که Disconnect شده
پس اجازه بدین خودم شروع کنم
یه راهش اینه که Client موقع DC شدن یه پیغام به سرور بفرسته و در آخر پیغام فرضا IP خودشو بفرسته.
نقل قول:
Disconnect' + Client_IP_Address + #0 // Disconnect192.168.2.12'
وقتی سرور این پیغام و میبینه ، IP فرستاده شده رو که در انتهای پیام هست می گیره و در لیست خودش دنبال این IP می گرده و هر جا این IP رو دید همون اندیس رو بر می گردونه.
نقل قول:
Var
;Data : String
;PreCode : String
;IP : String
Begin
;Data := Socket.RecieveText
;(Command := Copy(Data,1,10
If Command ='Disconnect' Then
Begin
;(IP := Copy(Data,11,15
For i:=0 To ServerSocket1.Socket.ActiveConnections -1 Do
If ServerSocket1.Socket.Connections[i].RemoteAddress = IP Then
Begin
DC_Index := i; //This is The answer
;Break
;End
;End
;End
این کد رو تو OnClientDisconnect در ServerSocket1 مینویسیم.
ولی مشکل این روش اینه که فقط در صورتی درست کار می کنه که کلاینت موفق بشه این پیغام رو بفرسته. حالا اگه کلاینت به هر دلیلی موفق نشه این پیغاو بفرسته، سرور هم نمی تونه اندیس کلاینتی که DC شده رو بدست بیاره.
مثلا اگه کامپیوتر کلاینت بصورت ناگهانی Reset یا خاموش بشه.
اگه از اساتید محترم کسی می دونه اینو باید چیکارش کنیم ممنون می شم راهنمایی کنه.
نقل قول: بدست آوردن نام کلاینتی که Disconnect شده
سلام دوست گرامي من با اين دو كامپوننت زياد آشنا نيستم ولي يه سؤال داشتم چرا با ايندي كار نمي كني به عقيده من خيلي مي تونه كارت رو راحت كنه مثلا براي همين مشكلي كه داري يه خط كد كافي بود و نيازي نبود كلاينت به سرور چيزي ارسال كنه و اصلا كار جالبي نيست.
نقل قول: بدست آوردن نام کلاینتی که Disconnect شده
سلام. می دونم خیلی راحت تره. آخه تعریف پروژه اینه که با این کامپوننت ها نوشته بشه. وگرنه همین برنامه رو من خودم با TCPServer و TCPClient از سربرگ Indy نوشتم.