음...다름이 아니라 스레드로 클라이언트 소켓 컴포넌트를 동적생성시키면서 각각의 그주소로 (만약100) 접속을 하거든요...(그러니까 서버컴포넌트를 가진 놈들이 100개가 있겠죠).근데 접속을 하고 간단한 메세지를 주고 받은후 그냥 끝인데...
이놈이 스레드를 생성하는것 또한 유동적으로 해주고 싶은거죠..
예를 들어 연결해야 할 대상은 100이고 관리자가 스레드의 갯수는 10으로 했다면
스레드는 10번을 생성하는도중 하나의 스레드가 끝나니까 9로 다운될 테고 만약 10이면 기둘리고 있다가 하나가 죽으면 다시 시작하고 (시간은 약간 걸리겠지만 그일을 하는 서버의 사양이 않좋다면 좋은 방법인거 같앙요)이런식으로요...
일단 클라이언트 소켓의 동적생성부분은 해 놨는데...
procedure TForm1.Button2Click(Sender: TObject);
var
Cnt : Integer;
begin
ipAdd[0] := '192.168.0.65';
ipAdd[1] := '192.168.0.115';
ipAdd[2] := '192.168.0.72';
Trd_Cnt := 2;
//Watching that Dynamic Create SocketComponent Thread!
LookOut := thLookOut.Create(False);
end;
procedure ThSocket.Execute;
var ClientSocket : TClientSocket;
begin
FreeOnTerminate := True;
isEnd := False;
ClientSocket := TClientSocket.Create(nil);
ClientSocket.Port := 7335;
ClientSocket.Address := ipAddress;
ClientSocket.OnError := ConnectError;
ClientSocket.OnRead := ReceiveMsg;
ClientSocket.OnConnect := SendMsg;
ClientSocket.Active := True;
repeat
Application.ProcessMessages;
until isEnd;
end;
procedure ThSocket.ReceiveMsg(Sender: TObject;
Socket: TCustomWinSocket);
begin
Socket.ReceiveBuf(RecvBuffer, 4096);
if pTTmpBase(@RecvBuffer)^.Msg = ALIVE2 then
begin
showmessage('뭐받긴 받았는데...');
Socket.Close;
Inc(N_Thd_Cnt);
isEnd := True;
end;
OpenList := TStringList.Create;
OpenList.Insert(0,IpAddress);
OpenList.Free;
end;
procedure ThSocket.ConnectError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
//showmessage(ArrIp[Cnt].Address^ + ' ErrorCode=' + IntToStr(ErrorCode));
CloseList := TStringList.Create;
CloseList.Insert(0, IpAddress);
CloseList.Free;
ErrorCode := 0;
isEnd := True;
end;
procedure ThSocket.SendMsg(Sender: TObject;
Socket: TCustomWinSocket);
begin
//showmessage('qnqkkkkkkkkkk');
FillChar(SendBuffer, 4096, #0);
pTTmpBase(@SendBuffer)^.Msg := ALIVE;
Socket.SendBuf(SendBuffer, SizeOf(DWORD));
end;
요넘이 일단 소스인데...그 감시하는놈을 어케 추가 해야 할 지 고수님덜 좀 도와 주세용....