پس اجازه بدین خودم شروع کنم
یه راهش اینه که 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 یا خاموش بشه.
اگه از اساتید محترم کسی می دونه اینو باید چیکارش کنیم ممنون می شم راهنمایی کنه.