Q&A

  • 쓰레드로 소켓 연결하기..
안녕하십니까..일주일째 이 문제로 골머리를 앓고 있습니다..

제발 좀 도와주십시요..



제가 구현하고자 하는 건 여러대의 서버에 연결해서 일괄적인 정보를 보다가 이상이 있는 서버가 발견되었을때 그 놈에게 별도로 연결해서 세부적인 정보를 보는겁니다..

그래니 각각을 쓰레드로 구현을 해야하잖아요..한쪽은 한놈씩 연결해서 정보를 보여주고, 한쪽은 특정(이상이 있는) 서버에 붙어서 그 놈 정보만을 보여주고...

편의상 아래처럼 전자의 경우를 PC1_Thread, 후자의 경우를 PC2_Thread라고 합시다..그런데 쓰레드 PC1_Thread 안에서부터 소켓 연결이 안됩니다..소켓 이벤트도 발생하지 않구요..(연결중,연결,에러 등도 전혀 발생하지 않거든요..)

여기서부터 막히니 솔직히 앞이 깜깜하네요..

해결좀 해주세요..미치겠슴다..

그리고 쓰레드에 대해선 잘 몰라서 그러는데 syncronize인가요? 그런것들도 있던데 그런거도 필요한가요?

부탁드립니다..제발..아래는 소스 중에서 연관있는부분만 발췌한 겁니다..





unit uMain;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ComCtrls, ExtCtrls, Series, TeEngine, TeeProcs, Chart, StdCtrls, ScktComp,

ImgList, Menus,Winsock, RXCtrls, IdBaseComponent, IdComponent; //Winsock : inet_addr



TForm1 = class(TForm)



ClientSocket1: TClientSocket;



procedure ClientSocket1Connect(Sender: TObject;

Socket: TCustomWinSocket);

procedure ClientSocket1Connecting(Sender: TObject;

Socket: TCustomWinSocket);

procedure ClientSocket1Disconnect(Sender: TObject;

Socket: TCustomWinSocket);

procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;

ErrorEvent: TErrorEvent; var ErrorCode: Integer);



procedure BtnPC1Click(Sender: TObject);





private

{ Private declarations }



public

{ Public declarations }



end;



TPC1_Thread = class(TThread)

private

//procedure Update;

protected

procedure Execute; override;

end;



TPC2_Thread = class(TThread)

private

//procedure Update;

protected

//procedure Execute; override;

end;

var

Form1: TForm1;



implementation

{$R *.DFM}



procedure TForm1.ClientSocket1Connect(Sender: TObject;

Socket: TCustomWinSocket);

begin

ShowMessage('연결.!!');

end;



procedure TForm1.ClientSocket1Connecting(Sender: TObject;

Socket: TCustomWinSocket);

begin

ShowMessage('연결중.!!');

end;



procedure TForm1.ClientSocket1Disconnect(Sender: TObject;

Socket: TCustomWinSocket);

begin

ShowMessage('연결이 끊어졌습니다.');

end;



procedure TForm1.ClientSocket1Error(Sender: TObject;

Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;

var ErrorCode: Integer);

begin

ShowMessage('연결 에러.');

end;

procedure TForm1.BtnPC1Click(Sender: TObject);

var

PC1_Thread :TPC1_Thread;



begin



//전체 릴레이 정보 보기 쓰레드 생성..

PC1_Thread := TAllRelay_Thread.Create(true);

PC1_Thread.Priority := tpHigher;

//All_R_Thread.Resume;



end;

///////////////////////////////

// 쓰레드 실행 프로시져 : 연결해서 정보를 가져와서 채운다..

procedure TPC1_Thread.Execute;

begin

Form1.ClientSocket1.Host := '211.61.13.133';

Form1.ClientSocket1.Port := 7820;

Form1.ClientSocket1.Active := True;



end;



end.

0  COMMENTS