왕초보와빌더 님이 쓰신 글 :
: 통신할때에도 버퍼를 사용하므로 아마 버퍼 비우기를 하셔야 할 겁니다.
:
: 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.
|