델파이 6에 있는 인디를 이용해서.. 테스트 해보고 있습니다..
Indy9의 기본 demo 프로그램 중에서... 서버랑 클라이언트랑 접속 테스트 하는거에 약간만 변형해서 테스트 해보고 있는데..
이거 잘 않되네요... 거참..
우선 클라이언트랑 서버란 접속은 잘 됩니다..
클라이언트쪽...
procedure TfrmMain.btnSendCommandClick(Sender: TObject);
var
LCommand, LInString : String;
LInInteger : integer;
begin
LCommand := cboCommands.Text;
LInInteger := -1;
with IdTCPClient do
begin
try
WriteLn(LCommand);
case cboCommands.ItemIndex of
0: LInString := ReadLn;
1: LInString := ReadLn;
2: LInInteger := ReadInteger;
3: LInString := ReadLn;
4: LInString := ReadLn;
5: LInString := ReadLn; <- 이걸 추가 했습니다(Test)
end;
if LInInteger <> -1 then
LInString := IntToStr(LInInteger);
lbCommunication.Items.Insert(0,'We said -> ' + LCommand);
lbCommunication.Items.Insert(0,'Server said -> ' + LInString);
except
on E : Exception do
begin
LockControls(True);
ShowMessage(E.Message);
end;
end;
end;
end;
서버쪽입니다.
procedure TfrmMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
Command, Meg : String;
begin
Command := AThread.Connection.ReadLn;
Command := uppercase(Command);
if Command = 'TIME' then
AThread.Connection.WriteLn(FormatDateTime('hh:nn:ss',now))
else if Command = 'DATE' then
AThread.Connection.WriteLn(FormatDateTime('dd/mmm/yyyy',date))
else if Command = 'TICKCOUNT' then
AThread.Connection.WriteInteger(GetTickCount)
else if Command = 'QUIT' then
begin
AThread.Connection.WriteLn('Goodbye!');
AThread.Connection.Disconnect;
end
///////// 이부분을 추가 했습니다 /////////////////////
else if Command = 'TEST' then begin
Meg := '';
With qrCh do begin
Close;
Sql.Clear;
Sql.Text := ' Select ChNmae from Chco where ChCode = ''1043''';
Open;
end;
Meg := qrCh.FieldByName('ChName').AsString;
AThread.Connection.WriteLn(Meg);
////////////////////////////////////////////////////////////////
end else AThread.Connection.WriteLn('Command not recognised - try again!')
end;
클라이언트에서 신호를 보내면... 그냥 쿼리 하나 돌려서... 업체명 하나 나오게 하는 테스트 인데요...
근데 않되네요...
제가 뭘 이해를 못하는 건지 도통 모르겠습니다..
처음 접해 보는 거라 그런지.. 뭐가 몬지도 모르겠구요..
답변좀 부탁드립니다..
sql문을 별도의 procedure 또는 function으로 선언하면 될 것 같습니다..