Q&A

  • 인디 서버로 받을때..
인디서버로 받을때요..
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  senddata: string;
begin
  While AThread.Connection.Connected and (not AThread.Terminated) do
  begin
    senddata := AThread.Connection.ReadString(58);
  end;
end;
이런식으로 받는데..문제는..받는 데이터의 종류가 4종류입니다..
길이가 다 다르기 때문에...길이에 맞쳐서 실행되게 할라고 했는데 잘 안되네요..
여러종류의 데이터를 받을때는 어떻게 해야하는지..
길이는 199,58,45,52 이렇게 네 종류가 있는뎅...
위의 방법은 정해진 길이가 찰때까지 받더군요..
어떻게 하면..길이별 데이터 별로 따로 이벤트를줄수 있는지 알려주세욥..

그리고 서버에서 클라이언트로 데이터를 보내는 방법 좀...텍스트로 보내야합니당...
writeString를 썼더니..TStrings 값이라고..에러가 뜨네요ㅠ.ㅠ
4  COMMENTS
  • Profile
    빙구 2002.12.18 01:20
    인디를 예전에 좀써보다가 요즘은 잘 안써서 기억이 잘안나지만
    데이타가 다 올때까지 기다리던가?..가물가물합니당.
    만약에 데이타가 다올때까지 기다린다면 데이타 구조를 좀 수정하심이 좋을듯하군요.

    TDatatype = record
      nsize:integer;
      nbuf: array[0..200] of char;
    end;

    이런식으로선언하셔서 보내실때 구조체로 보내시구요. 받으실때는
    ReceiveBuf를 쓰셔서 먼저 4바이트 받으셔서 사이즈를 알아낸다음에 다시 원래 데이타를 읽으시면 해결되실듯합니다.
    nsize에 보낼 데이타에 대한 사이즈값을 넣어서보내는거졉..
    이상 허접답변입니당.

  • Profile
    최용일 2002.12.17 23:38
    안녕하세요. 최용일입니다.

    ReadString을 쓰시지 마시고 ReadLn을 쓰세요. 보낼때는 WriteLn을 쓰시구요. 그럼 받아서 길이만 비교해보시면 4가지중 하나가 될겁니다...
    문자열이 아니라면 ReadBuffer, WriteBuffer를 쓰셔야 될거 같구요. 이럴땐 앞에 버퍼의 크기를 넣어서 그 버퍼의 크기만큼만 읽으셔야 되구요...

    OnExecute에서 루프문을 쓰시는 이유를 잘 모르겠네요... 인디는 쓰레드 방식으로 데이터가 올때만 OnExecute가 발생합니다. 굳이 루프문을 써서 읽으실 필요는 없을듯합니다...

    서버에서 클라이언트로 보낼때는 파라매터로 들어오는 AThread를 이용하세요. 이넘이 서버에 데이터를 보낸 클라이언트입니다.

    전체 클라이언트에 보낼려면 Threads속성을 이용하시면 됩니다. 락을 거시면 연결된 전체 클라이언트 리스트를 얻으실 수 있구요. 루프문을 돌면서 데이터를 보내시면 됩니다...

    ^^ 항상 즐코하세요...

  • Profile
    도니 2002.12.18 00:51
    매번 답변에 감사드리면서..
    질문하나 또 하겠습니다.>^^;;
    OnExecute 는 클라이언트에서 접속을 하면..무한으로 계속 도는데 왜그러는지요?
    값을 받으면 길이를 showmessage 를 써서 보이게 해줬습니다.
    ReadLn(senddata,500) 이런식으로 해놨더니..
    클라이어트에서 접속을 하니까 계속 돌던데...
    뒤에 숫자 500에 암것도 안쓰면 값이 안받아지고요..
    무엇이 문제인지..ㅠ.ㅠ

    그리고 또 다른 질문..
    클라이언트에서 받은 데이터를 또다른 서버에 전송할라면..어떻게 해야하는지..
    서버콤퍼넌트를 이용해서 저쪽 서버에 보낼수 있는 방법이 있나요?


  • Profile
    최용일 2002.12.18 07:43
    안녕하세요. 최용일입니다.

    무한으로 계속해서 도는것은 님께서 루프문을 사용하셔서 그러는것 같구요...

    ReadLn으로 값을 받으시려면 WriteLn으로 값을 보내셔야 합니다...

    서버에서 서버로 데이터를 보내실려면 이 두서버의 관계가 C/S형태가 되어야 합니다. 즉 한쪽 서버에서 다른쪽 서버로 접속을 하여야 해요... 이렇게 C/S관계가 되면 나머지는 똑같죠...

    ^^ 항상 즐코하세요...

    • 최용일
      2002.12.18 00:04
      안녕하세요. 최용일입니다. 두개의 데이터 형을 비교해보시면 되겠죠... 엑셀의 값은 Variant형으로 TVa...
    • 도니
    • 2002.12.17 22:46
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 빙구
      2002.12.18 01:20
      인디를 예전에 좀써보다가 요즘은 잘 안써서 기억이 잘안나지만 데이타가 다 올때까지 기다리던가?..가물...
    • 최용일
      2002.12.17 23:38
      안녕하세요. 최용일입니다. ReadString을 쓰시지 마시고 ReadLn을 쓰세요. 보낼때는 WriteLn을 쓰시구요...
    • 도니
      2002.12.18 00:51
      매번 답변에 감사드리면서.. 질문하나 또 하겠습니다.>^^;; OnExecute 는 클라이언트에서 접속을 하면...
    • 최용일
      2002.12.18 07:43
      안녕하세요. 최용일입니다. 무한으로 계속해서 도는것은 님께서 루프문을 사용하셔서 그러는것 같구요.....
    • 최용석
    • 2002.12.17 21:16
    • 3 COMMENTS
    • /
    • 0 LIKES
    • KDDG_hyun
      2002.12.17 22:41
      자게 보구선 찔려서 수정 합니다.. 기간을 받는다고 햇으니 기간을 for 문으로 돌리고요.. for i := ...
    • 구창민
      2002.12.17 21:45
      델파이의 날짜형은 수치이지요. 즉 연산이 가능합니다. 날짜연산에 대한 팁을 참조하시면 금방 해결...
    • 델파이탐크루즈
      2002.12.17 22:36
      var   a,b : Tdate;   c : integer; begin   a := strToDatetime('2002...
    • 나옹이
    • 2002.12.17 21:13
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 나옹이
      2002.12.18 01:55
      지금... ocx/servers/msppt8.pas 뜯어보고 있는뎅... 쇼보기에 관한건....찾아도 아뉘 보이니.... ...
    • 구창민
      2002.12.17 21:49
      원격의 컴에 네트웍 드라이브를 잡는다는 말씀이 그 컴에 공유된 디렉토리를 자신의 컴에서 네트웍 드라...
    • 유종근
      2002.12.17 21:14
      db에 파일의 경로와 파일이름을 저장해놓은 후 Client에서 불러보면 될텐데여 그렇게 어렵진 않겠네여..
    • 이대희
    • 2002.12.17 20:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 열심히
      2002.12.17 23:05
      DBGrid1.Columns[0].FieldName := qr_sel.Field('BUREAU_CODE').AsString; 위문장에서 TQuery에 Field...
    • 최은석
      2002.12.17 22:24
      다음처럼 해보시지요... 디비그리드,데이타소스,쿼리 컴포넌트를 하나씩 배치... 데이타소스의 dataset...
    • 열심히
      2002.12.18 01:12
      덧붙이자면 아래의 inherited문이없다면 try문중에 에러가 발생한다면 상위 루틴을 타지 않게되는데요....
    • 구창민
      2002.12.17 21:58
      안녕하세요~ 구창민입니다. except 는 에러가 날 시에만 타게 되는 반면, finally 구문은 에러가 발...
    • 델파이탐크루즈
      2002.12.17 19:30
      try ~ finally의 문법은 책을 보심이 더 좋을듯 하네여... 그리고 try ~ finally 안에있는건 Reg.Free ...
    • 조일영
    • 2002.12.17 19:03
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 다롱이
    • 2002.12.17 18:18
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 우소
    • 2002.12.17 12:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2002.12.17 23:58
      http://www.delphi.pe.kr  <-- 이곳에 가셔서 팁/강좌란에서 "서비스" 란 단어로 검색해보...
    • 우소
      2002.12.18 19:01
      마른 하늘에 단비가 온것 같네여. 정말 감사 합니다...
    • 김성복
    • 2002.12.17 07:14
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 타락천사
      2002.12.17 20:23
    • 2002.12.17 19:02
      TBitmap.SaveToFile 은 깨지지만, Bitmap을 Jpeg로 Assign해서 TJpegImage.SaveToFile을 사용하여 저장하...
    • 백재원
    • 2002.12.17 05:09
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 오승호
      2002.12.17 18:06
      제가 실행해봤는데 잘 되는군요 핼프에 보면 실행 리턴값이 32이하일때는 에러라고 했습니다. 42라면 정...
    • 백재원
      2002.12.17 19:57
      답변 고맙습니다. 제가 디버깅 상태에서 했기 때문입니다. 만들어진 exe파일에서 돌려 보니 잘돌아 가더군...
    • 최용일
      2002.12.17 08:43
      안녕하세요. 최용일입니다. StrToInt에는 숫자로 된 문자열이 와야 하는데... '1,000'같은 문자열이 오...
    • 이중철
      2002.12.17 04:39
      전 스레드를 썼어요..   if ((mouse.CursorPos.X > left) And (mouse.CursorPos.X < (l...
    • 이추형
    • 2002.12.17 03:38
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.17 05:03
      안녕하세요. 최용일입니다. BDE유닛에 아래와 같이 설명되어있네요... 참고하세요... const  &...
    • 이추형
      2002.12.19 03:43
      DataModule을 새로 맹글어 기존의 DataModule을 대치 했습니다. 그랬더니 잘 되는군요.. 단순 BDE문제는 ...
    • 서정길
    • 2002.12.17 02:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.17 05:09
      안녕하세요. 최용일입니다. 프로젝트가 있는 폴더에 보시면 프로젝트명.dsk란 파일이 있을겁니다. 이...