통신할때에도 버퍼를 사용하므로 아마 버퍼 비우기를 하셔야 할 겁니다.
IdTCPClient1.IOHandler.flush 던가 하는걸 WriteLn 한 후에 해주면 되겠지요
김수정 님이 쓰신 글 :
: 아래 처럼 코딩했는데요.
: 프로그램을 실행하고 Button1을 처음 누를때는 서버쪽에 메세지가 나타납니다.
: 그런데 두번 연속해서 클릭하면 서버쪽에서 처음 누를때만 메세지가 전송되고
: 두번쩨 클릭할때는 에러가 납니다.
: 그런데 이상한건 한번 클릭하고 나서 한참이 지난 다음 또 클릭해보면 이상없이 잘 전달이 되거든요.
: 어디가 잘못되었는지 봐주시면 감사하겠습니다.
: ==================================클라이언트==================================
: procedure TForm1.Button1Click(Sender: TObject);
: begin
: Try
: Try
: IdTCPClient1.Connect;
: IdTCPClient1.IOHandler.WriteLn(Edit1.Text, TIdTextEncoding.UTF8);
: Finally
: IdTCPClient1.DisConnect;
: End;
: Except
: Memo1.lines.add('에러났다!!');
: End;
: end;
:
: ==================================== 서버=====================================
: unit ServerU;
:
: interface
:
: uses
: Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
: Dialogs, IdContext, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent,
: IdComponent, IdCustomTCPServer, IdTCPServer, IdScheduler,
: IdSchedulerOfThreadDefault, IdGlobal, ExtCtrls, StdCtrls;
:
: type
: TForm1 = class(TForm)
: IdTCPServer1: TIdTCPServer;
: IdAntiFreeze1: TIdAntiFreeze;
: ImageList1: TImageList;
: TrayIcon1: TTrayIcon;
: IdSchedulerOfThreadDefault1: TIdSchedulerOfThreadDefault;
: Memo1: TMemo;
: procedure FormCreate(Sender: TObject);
: procedure FormClose(Sender: TObject; var Action: TCloseAction);
: procedure IdTCPServer1Execute(AContext: TIdContext);
: private
: { Private declarations }
: public
: { Public declarations }
: end;
:
: var
: Form1: TForm1;
:
: implementation
:
: {$R *.dfm}
:
: procedure TForm1.FormCreate(Sender: TObject);
: begin
: IdTCPServer1.Active := True;
: end;
: procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
: begin
: IdTCPServer1.Active := False;
: end;
:
: procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
: var
: ReceivedString: string;
: CMD : String;
: Begin
: ReceivedString := AContext.Connection.IOHandler.ReadLn(TEncoding.UTF8);
: CMD = Copy(ReceivedString, 1, 3);
:
: IF CMD = 'MSG' THEN ShowMessage('[MSG]가 들어왔다')
: Else IF CMD = 'CMD' THEN ShowMessage('[CMD]가 들어왔다')
: Else ShowMessage('뭔가가 들어왔는데....?');
:
: end;
: end.
|