求助 XP下socket为何不释放(有点难度)(100分)

  • 主题发起人 主题发起人 maya2000
  • 开始时间 开始时间
M

maya2000

Unregistered / Unconfirmed
GUEST, unregistred user!
本人写一个代理扫描的程序。
程序主导思想的申明一个结构:session_Record,含一个TClientSocket:CSocket。
申明一个255长度的数组:sessionArray:array[1..255] of session_Record ;用于记录每个IP段的地址,处理sokect事件。
在一个线程里将sessionArray[n]里的TClientSocket的相关connect,write,read,error事件赋值给页面上的一个TClientSocket的相应事件来处理。
在进行多个IP段的扫描时,逐个对该IP段的每个IP进行:sessionArray[n].CSocket.Socket.Close ;(释放上一个IP段的socket资源)。
然后再对 sessionArray[n].CSocket.Host 及Port 进行赋值。CSocket.Active := true。
关键问题:在win2000下系统正常运行,可扫描出代理IP。在XP及2003下系统不释放socket资源!

跪求答案!
 
附部分源代码:(CSocket为TClientSockt)
inc(iIPCount);
if iIPCount>510 then iIPCount := iIPCount-510;
with sessionArray[iIPCount] do
begin
if Assigned(CSocket) then
try
CSocket.Socket.Close;
closehandle(CSocket.Socket.Handle) ;
if CSocket.Active then CSocket.Close;
except
end
else
begin
CSocket := TClientSocket.Create(Nil);
// CSocket.ClientType := ctBlocking;
CSocket.OnConnecting := clientSocketConnecting;
CSocket.OnConnect:= clientSocketConnect;
CSocket.OnDisconnect:=clientSocketDisconnect;
CSocket.OnError:=clientSocketError;
CSocket.OnRead:=clientSocketRead;
CSocket.OnWrite:=clientSocketWrite;
CSocket.OnLookup := clientSocketLookup;
socket_Handle := CSocket.Socket.Handle;
end;
CSocket.Host := s;
beginTime := Now();

CSocket.Port := strtoint(Combobox2.Items.Strings[1]);
try
CSocket.Active := true;
except
CSocket.Close;
end;
end;
 
最后再closehandle下试试.
winsock用得比较多.
 
楼上,请问在哪里再closehandle?谢谢![:)]
 
closehandle(CSocket.Socket.Handle) ;
改成closehandle(CSocket.Socket.SocketHandle) 也不行!
 
是否为XP对TCP并发数为限制?但我看过一个代理扫描软件,其在XP下可运行啊?
 

Similar threads

后退
顶部