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;
程序主导思想的申明一个结构: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;