Q&A

  • 서버소켓을 동적생성하는데 .... 이벤트는 어떻게....
안녕하세요..ㅎㅎ

서버소켓을 동적생성 했습니다..

그런다음 클라이언트 쪽에서 메시지 보낸것을 OnClientRead 이벤트에서 처리를

하고 싶은데 이벤트 처리를 하려고 하는데... 어떻게 하는건지...

사이트 검색을 해보니



procedure TForm1.Myprocedure(Sender : TObject; Socket : TCustomWinSocket);

begin

showmessage('바보');

end;



.............

...........

.............





Mysocket := TServerSocket.Create(Self);

Mysocket.OnClientRead := Myprocedure;



이런식이더라구요....

즉 이벤트가 일종의 메소드의 포인터기 때문에 이런식으로 한것 같은데...

에러가 나고 잘 안되네요...

프로시저 정의가 안되었다구도 하구... 암튼 확실한 예제 하나만 들어주시면

대단히 감샤하겠습니다....

쪽.......

4  COMMENTS
  • Profile
    홍성락 2001.09.01 22:56
    초보공주 wrote:

    > 안녕하세요..ㅎㅎ

    > 서버소켓을 동적생성 했습니다..

    > 그런다음 클라이언트 쪽에서 메시지 보낸것을 OnClientRead 이벤트에서 처리를

    > 하고 싶은데 이벤트 처리를 하려고 하는데... 어떻게 하는건지...

    > 사이트 검색을 해보니

    >

    > procedure TForm1.Myprocedure(Sender : TObject; Socket : TCustomWinSocket);

    > begin

    > showmessage('바보');

    > end;

    >

    > .............

    > ...........

    > .............

    >

    >

    > Mysocket := TServerSocket.Create(Self);

    > Mysocket.OnClientRead := Myprocedure;

    >

    > 이런식이더라구요....

    > 즉 이벤트가 일종의 메소드의 포인터기 때문에 이런식으로 한것 같은데...

    > 에러가 나고 잘 안되네요...

    > 프로시저 정의가 안되었다구도 하구... 암튼 확실한 예제 하나만 들어주시면

    > 대단히 감샤하겠습니다....

    > 쪽.......

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

    ServerSocket생성후에

    Port번호와 Open도시켜줘야할것 같은데요.

    일단생성된것은 디폴트값을가지므로 속성을 모두 원하는것으로 바꿔보세요

    Mysocket := TServerSocket.Create(Self);

    Mysocket.OnClientRead := Myprocedure;

    Mysocket.Port := 1024;

    Mysocket.Open;





  • Profile
    나그네 2001.09.04 01:38
    컴포넌트 동적으로 생성해서 이벤트 연결 시켜주는 법에 대해 말씀 드리겠습니다.



    가장 쉬운 예로 TButton



    var

    TempButton : Tbutton;

    begin

    TempButton := Tbutton.Create(Form1);

    TempButton.parent := Form1;

    TempButton.Left := 10;

    TempButton.top := 11;

    TempButton.OnClick := MyClick;





    이렇게 만들었으면 이벤트 연결 시켜주는데

    onclick의 형식과 똑같이 MyClick이 선언되어 있어야 합니다.

    procedure MyClick(Sender : Tobject);



    이렇게요...형식이 다르면 이벤트 연결 안됩니다.



    소켓 역시...원래 그 소켓이 갖고 있는 이벤트의 형식과 똑같이 님께서

    선언하시구 그 함수 짜주신다음에 연결해 주시면 됩니다



    저기보면 Tbutton은 parent를 지정해 주었는데 그건 TButton이 비주얼 컴포넌트라서 화면에 나타내주기 위해서고 socket은 넌비주얼 컴포넌트이니까 필요 없을 것 같습니다

  • Profile
    초보공주 2001.09.01 23:18
    답변 감사합니다.

    하지만 그래도 안되는 걸요...

    위에서 선언한 Myprocedure의 인자값을 써주지 않아서 그런건 아닙니까?



    Mysocket.OnClientRead := Myprocedure;



  • Profile
    홍성락 2001.09.02 00:24
    초보공주 wrote:

    > 답변 감사합니다.

    > 하지만 그래도 안되는 걸요...

    > 위에서 선언한 Myprocedure의 인자값을 써주지 않아서 그런건 아닙니까?

    >

    > Mysocket.OnClientRead := Myprocedure;

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

    테스트도했는데 잘되요.

    아래 전체를 보시고 해보세요,

    만약 안되면 소스를 메일로 보내주시면 저도 공부해보겠습니다

    unit Unit1;



    interface



    uses

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

    StdCtrls, ScktComp;



    type

    TForm1 = class(TForm)

    procedure Myprocedure(Sender : TObject; Socket : TCustomWinSocket);

    procedure FormShow(Sender: TObject);

    private

    { Private declarations }

    Mysocket : TServerSocket;

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.Myprocedure(Sender : TObject; Socket : TCustomWinSocket);

    begin

    showmessage('바보');

    end;



    procedure TForm1.FormShow(Sender: TObject);

    begin

    Mysocket := TServerSocket.Create(Self);

    Mysocket.OnClientRead := Myprocedure;

    Mysocket.Port := 1001;

    Mysocket.Open;

    end;



    end.