ورود

View Full Version : خطای سوکت 10038 و راه حل آن



seyed_farid
یک شنبه 07 بهمن 1397, 22:23 عصر
با سلام
من از دستور زیر استفاده کردم و کلاینتهای متصل شده به سرور را در یک لیست باکس ثبت میکنم

procedure TForm1.ServerConnect(Client: TTCPConnection);
begin
ClientCounter := 1;
Client.Data := TClientData.Create;

with TClientData(Client.Data) do
begin
Name := Client.PeerIP;
if ListBox1.Items.IndexOf(Name) >= 0
then
begin
Name := Client.PeerIP + '_'+ InttoStr(ClientCounter);
while ListBox1.Items.IndexOf(Name) >= 0 do
begin
Inc(ClientCounter);
Name := Client.PeerIP + '_'+ InttoStr(ClientCounter);
end;
end;

ListBox1.Items.AddObject(Name, Client);


و بعد برای ارسال متن به آنها از دستور زیر استفاده کردم.


TTCPConnection(ListBox1.Items.Objects[i]).WriteLn(s ,Delim)

بعد از چند ساعت که برای ارسال متن به همه کلاینتها اقدام میکنم پیام خطای زیر برای بعضیهاش صادر میشه.

Error #10038 : An operation was attempt on something that is not a Socket.
میشه راهنمایی کنید؟ :تشویق::تشویق::تشویق:

مثل اینکه سوکت قطع شده و نامش تو لیست باکس مونده. البته من دستور زیر رو هم تو برنامه دارم.


procedure TForm1.ServerDisconnect(Client: TTCPConnection);
begin

try // 95-7-28
with TClientData(Client.Data) do
begin
Memo1.Lines.Add(Format('%s: %s disconnected', [FormatDateTime('yyyy/MM/DD HH:mm:ss:zzz',Now), Name]));
ListBox1.Items.Delete(ListBox1.Items.IndexOf(Name) );
Free;
end;
except end;
end;

seyed_farid
پنج شنبه 19 فروردین 1400, 12:30 عصر
سلام
دوستان ، کسی نظری نداشت برا این مشکل؟:افسرده:

Mask
جمعه 14 آبان 1400, 23:06 عصر
سلام
دوستان ، کسی نظری نداشت برا این مشکل؟:افسرده:
از کدوم کامپوننت استفاده میکنید؟
ایا در ondiscpnnect یوزری که قطع میشه رو از لیست حذف میکنید؟