کلاینت های متصل شده به سرور
با عرض سلام خدمت دوستان بزرگوار
من یه برنامه سرور دارم که بهنگام اتصال کلاینتها چکی انجام میدم و اگر شرایط موردنظر برقرار نباشد ، آن کلاینت را دیسکانکت می کنم.
در زمان اتصال این کد را دارم.
ضمناً سرورم از نوع TTCPServer هست.
procedure TA1.ServerConnect(Client: TTCPConnection);
var s : string;
i: integer;
begin // OnConnect Client to this Server.
S := Client.ReadLn();
if (LeftStr(s ,9) = 'AN=220') and (MainServerShape.Brush.Color <> CLLime)
then
begin
Client.Disconnect;
exit;
end;
end;
که وقتی شرایط مورد نظر موجود نباشد کلاینت دیسکانکت میشود.
ولی حالا چرا وقتی با کد زیر تعداد کلاینتهای متصل به سرور رو میگیرم با هر کانکت کلاینت به سرور این تعداد اضافه میشود ولی وقتی دستور دیسکانکت انجام میشود، علارغم اینکه آن کلاینت دیسکانکت شده است ولی تعداد کلاینتها کم نمیشود.
procedure RefreshListBox1;
var i : Integer;
NumClients: Integer;
begin
with A1.Server.Connections.LockList do
try
NumClients := Count;
finally
A1.Server.Connections.UnlockList;
end;
ShowMessage('There are currently ' + IntToStr(NumClients) + ' client(s) connected');
end;
دوستان میشه لطفاً راهنمایی بفرمائید. :تشویق::قلب:
نقل قول: کلاینت های متصل شده به سرور
سلام.
استیت کانکشن رو بررسی نکردید.
حتی بعد از دیسکانکت، ممکنه کانکشن در فهرست موجود باشه ولی وضعیت اون تغییر می کنه تا دراپ بشه.
بررسی کنید این مورد رو ببینید این کامپوننت هم از همین روش استفاده می کنه یا نه.
نقل قول: کلاینت های متصل شده به سرور
ممنون از پاسختون
میشه بیشتر توضیح بفرمائید.:متفکر:
نقل قول: کلاینت های متصل شده به سرور
دوستان
بنظرتون برای سروری که فقط بخوام باهاش بصورت string ارتباط داشته باشم و تکست بدم و بگیرم ، از TTCPServer استفاده کنم بهتره یا از Indy ؟
این TTCPServer کامپوننت خوبی هست؟
نقل قول: کلاینت های متصل شده به سرور
نقل قول:
نوشته شده توسط
seyed_farid
دوستان
بنظرتون برای سروری که فقط بخوام باهاش بصورت string ارتباط داشته باشم و تکست بدم و بگیرم ، از TTCPServer استفاده کنم بهتره یا از Indy ؟
این TTCPServer کامپوننت خوبی هست؟
برای این امور بهتره از http استفاده کنید.
نقل قول: کلاینت های متصل شده به سرور
کار کردن با TCPServer در کل راحت نیست وقتی بخواید یک برنامه پایدار بیرون بدید ملاحظات بیشماری باید مد نظر باشه و این کار، کار طاقت فرسایی هست مثلا فرض کنید در مورد همین مثال، کلاینت فقط کانکت بشه ولی هیچی نفرسته چه اتفاقی میافته یا مثلا بفرسته ولی دیتای بی ربط و بسیار بزرگی باشه؟ این مطلب رو البته کلی و بدون توجه به اصل سوال خدمتتون عرض کردم.
با توجه به اینکه کار کردن با tcpserver کار بسیار حساسی هست من فکر میکنم بهتره از Indy استفاده بشه هر چند Indy هم هنوز که هنوزه ایراداتی داره ولی به هر حال به نظر میاد بهتر از سایر کامپوننتها و کتابخانه های مشابه تست شده و ایرادهای زیادی در اون برطرف شده. البته پشتیبانی خوبی هم نداره ولی احتمال زیاد برای اکثر کارها بشه روش حساب باز کرد.
در Indy در زمان disconnect خودتون باید مقدار AData در context مربوط به کانکشن رو nil کنید احتمالا این هم باید چیز مشابهی داشته باشه.