아래 처럼 코딩했는데요.
프로그램을 실행하고 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.
|