Q&A

  • UNIX 프로세스 실행 시키는 방법
이 델파이 소스와 연결되는 UNIX 상의 서버 프로세스가 있습니다.
UNIX에서 실행시키지 않고 델파이 상에서 실행을 시켜서 연결을 하고 싶은데
델파이에서 서버 프로세스를 실행시키는 방법을 잘 모르겠습니다.
더욱이 UNIX는 ID, pass를 묻는데 또 어떻게 하면 좋을지
UNIX상의 시스템 컴멘드를 어떻게 사용할 수 있는지 좀 가르쳐 주세요..



unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ScktComp, StdCtrls, ExtCtrls, ComCtrls;

type
  TMainForm = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    ClientSocket1: TClientSocket;
    ErrTimer: TTimer;
    edtIpaddr: TEdit;
    edtPortno: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    lstvShow: TListView;
    btExit: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ErrTimerTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Lookup(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure btExitClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure AppError(Sender: TObject; EE: Exception);
  end;

var
  MainForm: TMainForm;
  pCount  : Integer;
  pDate   : string;
  pTime   : string;
  pNode   : string;
  pInga   : string;
  pString : string;

implementation

uses connect;

{$R *.DFM}

procedure TMainForm.AppError(Sender: TObject; EE: Exception);
begin
//  ShowMessage(EE.Message); //에러메세지
  Application.ShowException(EE);
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
  if ClientSocket1.Active then ClientSocket1.Close;
  MainForm.lstvShow.Items.Clear;
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
    ClientSocket1.ClientType := ctNonBlocking;
    ClientSocket1.Address    := edtIpaddr.Text;
    ClientSocket1.Port       := StrToIntDef(edtPortno.Text, 0);
    ConnectForm.ShowModal;
    pCount := 0;
end;

procedure TMainForm.ErrTimerTimer(Sender: TObject);
begin
  ErrTimer.Enabled:= False;
  Application.MessageBox('접속에 실패했습니다. 서버의 응답이 없습니다.', '확인', MB_OK+MB_ICONINFORMATION);
  ConnectForm.Close;
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Application.OnException := AppError;
end;

procedure TMainForm.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key=VK_RETURN then
  begin
    Edit1.SelStart:= 0;
    Edit1.SelLength:= Length(Edit1.Text);

    ClientSocket1.Socket.SendText(Edit1.Text + #13#10#0);
  end;
end;

procedure TMainForm.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Edit1.Text := '[Connected]';
  ErrTimer.Enabled:= False;
  ConnectForm.Close;
end;

procedure TMainForm.ClientSocket1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Edit1.Text := '[Connecting..]';
end;

procedure TMainForm.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Edit1.Text := '[DisConnected]';
end;

procedure TMainForm.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  Edit1.Text := '[Error]';
  exit;
end;

procedure TMainForm.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  liCnt : Integer;
  NodeP : TListItem;
  pDate : string;
begin
  NodeP := MainForm.lstvShow.Items.Add;
  Edit1.Text := Socket.ReceiveText;
  pCount := pCount + 1;

  pDate   := Copy(Trim(Edit1.Text),  0, 8);
  pTime   := Copy(Trim(Edit1.Text),  9, 6);
  pNode   := Copy(Trim(Edit1.Text), 15, 2);
  pInga   := Copy(Trim(Edit1.Text), 17, 8);
  pString := Copy(Trim(Edit1.Text), 25, 9);
  
  case StrToInt(pNode) of
    11 : pNode := 'Jupiter';
    12 : pNode := 'Hover';
    13 : pNode := 'Magellan';
    14 : pNode := 'Armada';
  end;

  NodeP.SubItems.Add( IntToStr(pCount) );
  NodeP.SubItems.Add( pNode );
  NodeP.SubItems.Add( pInga );
  NodeP.SubItems.Add( pDate );
  NodeP.SubItems.Add( pTime );
  NodeP.SubItems.Add( pString );

  if MainForm.lstvShow.Items.Count > 27 then
    MainForm.lstvShow.Columns[07].Width := 176  // ListView ScrollBar 조절을
  else MainForm.lstvShow.Columns[07].Width := 192; // 위해 마지막 Colum Width 조정

end;

procedure TMainForm.ClientSocket1Lookup(Sender: TObject;
  Socket: TCustomWinSocket);
begin
end;

procedure TMainForm.btExitClick(Sender: TObject);
begin
   MainForm.Close;
end;

end.
1  COMMENTS
  • Profile
    이현철 2002.08.21 18:36
    우선 windows 프로그램에서 Unix 상의 Command 를 실행시킬수 있는
    방법은 두가지 정도로 나누어집니다.

    1. windows와 Unix 에서 소켓프로그램을 개발해, Connection 한후
       명령어 처리를 한다.

    2. windows프로그램에서 Telnet 컴포넌트나, 소스를 이용해서
       Unix Telnet 서비스에 ID,PASS를 자동로그인하게 한뒤
       명령어 처리에 대한 것을 나타낸다(파싱해서 나타내면 더 좋음)

    위 두가지 방법은 제가 다 구현해보았던 방법입니다...
    참고하세요..
    • 이정한
    • 2002.08.17 22:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 황준동
      2002.08.18 00:09
      0 : frmSmon.Edit1.Text := frmSmon.Edit1.Text +IntToHex(rxBuf[rxcnt],2) + ' ';   1 : frmS...
    • 델델델
    • 2002.08.17 21:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 황준동
      2002.08.18 00:15
      파일 처리와 파일 스트림의 차이를 굳이 말씀드리자면, 스트림 글자 차이겠지요. 같이 파일을 처리하는 ...
    • 이희성
    • 2002.08.17 21:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오병주
      2002.08.17 21:33
      냉무라고 했는데 보는사람은 뭐지..  ㅡㅡ^ 쩝.....
    • 황준동
      2002.08.18 00:34
      DBGrid1.DefaultDrawing := False; OnDrawColumnCell 이벤트에서 그려 주시면 됩니다. 예를 들면 ...
    • 강미경
    • 2002.08.17 20:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 문재욱
      2002.08.17 20:47
      원하는 답변이 맞는지 모르겠네요.. 메모컴포넌트에 읽어들였다면 커서가 메모 텍스트의 끝부분에서 커...
    • 심청이
    • 2002.08.17 19:15
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 황준동
      2002.08.18 00:36
      어떤 프로그램이고, 어떻게 코딩되어 있는지는 잘 모르겠지만. 제 생각으로는 델파이를 새로 깔고 패치를 ...
    • 심청이
      2002.08.18 02:58
      관심 감사드립니다. 이제야 방향을 잡은 것 같습니다. 프로그램에서 자체적으로 제작한 DLL을 호출하...
    • 나옹이
    • 2002.08.17 19:01
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김용구
      2002.08.18 01:05
      TQuery  컴포넌트를 사용해서 불러 온거면 RequestLive := True 로 설정 해주시고요 DBGrid ...
    • 나옹이
      2002.08.18 02:08
      table로 할때는 다른가요?
    • 맑은물
      2002.08.18 07:28
      table 로 하시면 기본 디폴트 값으로도 수정이 되던데요. 일단 테스트로 table 컴포넌트를 배치하고 네비...
    • 나옹이
      2002.08.19 06:58
      냅...그건 알고 있는데요.... table1.tabelname:='aaa'; 라고 지정하면.... 걍 데이터가 나오면서......
    • 황준동
      2002.08.18 00:46
      화면은 보통 72DIP 정도 됩니다. 하지만 프린터 같은 경우엔 600DIP이니 뭐니해서 상당히 크죠. 따라서 화...
    • 나옹이
    • 2002.08.17 07:00
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 나옹이
      2002.08.17 07:13
      제가 브레이크 포인트로 잡아서 보니깐... 공백을 받으면.... 에러가 나는거 같아요........ 빈 필드...
    • 나옹이
      2002.08.17 07:56
        while Not EOF do begin         j := 1;  &...
    • 김요한
    • 2002.08.17 05:35
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.08.17 18:33
      안녕하세요. 최용일입니다. 하나의 파일만 있든 여러개의 파일들이 있든 한번에 하나씩만 전송합니다. ...
    • 이정택
    • 2002.08.17 04:30
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 하늘벌레
      2002.08.21 00:38
      질문내용으로 보아 마스터/디테일로 구현하시는것도 좋을듯하네요 일일이 쿼리 안던져도 되니까요 ^^;
    • 이창환
      2002.08.17 05:39
      DBGrid.DataSource.DataSet.RecordCount를 이용하거나.. 자료건수가 0인것을 체크하는 거라면 RecordCount...
    • 갈매기
      2002.08.17 05:04
      query1.recordcount = 0 then showmessage('데이타가 없습니다'); 이렇게 하면 안될까요? 허접 초...
    • 나옹이
    • 2002.08.17 04:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 양용성
      2002.08.17 13:09
      보아하니 오라클 같은데 먼저 SYS.ALL_TAB_COLUMNS - 테이블에서 정보를 가져옵니다. SYS.ALL_CONSTRAI...
    • 나옹이
      2002.08.17 17:09
      냅...... 전체 스키마를 만들어주는 구문은 없었군요... 테이블 정보를 보고서 조합해서 만들어야 한...
    • 동규재
    • 2002.08.17 03:32
    • 1 COMMENTS
    • /
    • 1 LIKES
    • 이현철
      2002.08.21 18:36
      우선 windows 프로그램에서 Unix 상의 Command 를 실행시킬수 있는 방법은 두가지 정도로 나누어집니다. ...
    • 황원규
    • 2002.08.17 03:11
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김헌대
      2002.08.17 22:08
      이렇게 사용하면 어때여.. 이 procedure는 입력문자나 숫자을 에디터 창에서 정렬시켜주는 겁니다. 델파...
    • 갈매기
      2002.08.17 05:08
      숫자만 입력하신다면 numEdit를 사용하시는게 어떨지요~~
    • 황원규
      2002.08.17 17:49
      답변 감사합니다. 근데,  numEdit에 대해서 잘 모르겠네요. 첨 보는 거라, Help를 찾아봐도 ...
    • ^ㅡ^
      2002.08.17 18:51
      //numEdit란 하나의 컴포넌트입니다. 델파이에서 제공해주는것이 아니고 사용자가 만든 컴퍼런트입니...
    • 황준동
      2002.08.18 00:38
      Delphi 강의실에 맨 앞쪽에 보면 이것에 대한 강좌가 있습니다. 그걸 참조하시면 될것 같네요.
    • 2002.08.17 02:49
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이창환
      2002.08.17 05:29
      설정 : Edit의 Name속성을 Edit0 ~ Edit30이라고 가정한 후 var     TmpComp : TC...
    • 고지범
      2002.08.17 02:03
      일단 폼위에 작업을 편하게 하기 위해서 TEdit 가 순서대로 있다고 가정 하겠습니다. 테스트를 편하게 하...
    • 김요한
      2002.08.18 01:04
      제가 질문하고 제가 답을 하네요. 혹시 여러분들 중에서 메일에 대한 테스트를 하실때는 hotmail과 같...