Q&A

  • 인디서버(9.0)에서 구분해서 받고 보내기
매일매일 질문하면서도...
아직 해결을 못해서..또 질문합니당...
2가지만 해결하면 될꺼 같은뎅...ㅠ.ㅠ

우선 Execute 로 받을때요..
구분해서 받을수 있나요?
AThread.Connection.ReadString(숫자); 숫자만큼 찰때까지 받더군여..
AThread.Conncetion.AllData; 클라이언트가 종료할때까지 받더군여..
AThread.Conncetion.ReadLn; 이것은 제가 사용법을 틀렸는지 몰라도 값을 받지 못해요..ㅠ.ㅠ
서버쪽에서 받는 데이터의 길이가 일정하면 첫번째 경우를 쓰면 해결이 되지만.
길이가 일정하지 않습니다..
조건문 같은것을 써서..길이가 100 이면 이쪽을 실행시키고..
길이가 200이면 저쪽을 실행시키고 싶습니다..
어떻게 해야하나요?? ㅠ.ㅠ

그리고 두번째로..
AThread에 있는 정보로 클라이언트에 보낼수 있다고 저 밑에서 답변해 주셨는데요..
AThread.Conncetion.WriteXXX 로 보내라는데..
클라이언트가..여러개가..연결되어 있는 상태일때도..
상관이 없는 건가요?
기본소켓처럼 [0] [1] 이런 구분이 없어도 되는건지요?
저렇게 하면 그때 보낸 클라이언트로 메세지가 가는지요??

두번째 질문같은 경우는 제가 테스트를 하고 질문해야 하지만...
지금 서버를 카일릭스로 옮겼더니..자꾸 멈춰서요..죄송합니다..ㅠ.ㅠ

환경은여.서버는 카일릭스3이고요..(인디서버)
클라이언트는 델파이6으로 구현중입니다..(기본소켓)
그리고 전송데이터는 전부 텍스트로 전송합니다..
3  COMMENTS
  • Profile
    최용일 2002.12.23 20:11
    안녕하세요. 최용일입니다.

    전송데이터가 텍스트면 기본소켓에서 보낼때 문자열끝에 전부 캐리지리턴(#13#10)을 넣어서 보내세요... 그럼 인디에서 받을때 ReadLn만 쓰시면 길이에 상관없이 다 받아집니다...

    받았으면 문자열의 길이를 비교해서 case문이나 if문등을 써서 비교하시면 되겠구요...

    파라매터 AThread이용하시면 클라이언트가 여러개여도 상관이 없습니다. 항상 AThread는 데이터를 보낸 클라이언트가 되니까요... AThread를 이용해서 데이터를 보내면 AThread가 가리키는 클라이언트로만 데이터가 갑니다.

    전체 클라이언트에 메세지를 보내실려면 Threads란 속성을 이용하시면 됩니다.

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

  • Profile
    도니 2002.12.23 21:19
    답변감사합니다..
    덕분에 실마리를 풀어서 어느 정도 진전이 있었습니다..

    그리고 추가 질문이 뭐냐면요..
    제가 애초에 질문을 할 때 빼먹은 부분입니다..
    저의 부족한 질문 실력이져..ㅠ.ㅠ

    제가 구현하고 있는 서버가 중계서버역할을 합니다..
    그래서 이쪽에서 받은걸 저쪽으로 보내는 부분이 있습니다.
    물론 이쪽에서 받아서 이쪽으로 보내는 부분은 덕분에 해결했고요..^^
    문제는 이쪽에서 받은걸 저쪽으로 보내는 방법은 없을까요?
    저쪽에 해당하는 부분이 두 종류입니다..
    하나는 서버구요 하나는 클라이언트입니다.
    서버쪽으로 보내는거야..아이피랑 포트 설정해서 보내면 될꺼 같은데요..
    문제는 클라이언트쪽으로 보내는 부분이...

    서버에서 받으면 AThread의 정보가 바뀌는데..그럼 그 클라이언트를 지정을
    어떻게 해주는지요?

    구조가 어떻게 되어있냐면요 클라이언트가..제 서버로 요청을 하면..
    제 서버가 외부 서버에 그 자료를 요청해서 값을 받아와서
    그 값을 다시 클라이언트에 보내주게 되어있습니다.

    그림으로 표현하면

    클라이언트
                    > 제가 구현하는 서버 - 저쪽 서버
    클라이언트

    클라이언트가 저쪽서버로 직접 연결할 수 도 있겠지만..이건 최후의 선택이 아닐까 싶어서요.>^^
    저쪽서버로 직접 연결하면 제 서버의 의미가 줄어드니까요..^^;;
  • Profile
    최용일 2002.12.23 21:50
    안녕하세요. 최용일입니다.

    중계서버가 어떤방식으로 말단서버로 연결을 하는지에 따라서 방법이 달라지겠네요...

    중계서버에서 말단서버로 접속을 한다면 그 접속하는 통신컴포넌트를 이용하셔서 말단서버와 통신해서 얻은 데이터를 바로 클라이언트로 전송하시면 되겠구요...

    // TCPClient => 말단서버와 통신하는 컴포넌트  
    procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    begin
        // 클라이언트=>중계서버
        클라이언트에서온데이터 := AThread.Connection.ReadLn;
        // 중계서버=>말단서버
        TCPClient.WriteLn(클라이언트에서온데이터);
        // 말단서버=>중계서버
        말단서버에서온데이터 := TCPClient.ReadLn;
        // 중계서버=>클라이언트
        AThread.Connection.WriteLn(말단서버에서온데이터);
    end;

    말단 서버에서 중계서버로 접속을 한다면 말단서버도 역시 클라이언트로 생각해서 이 클라이언트들의 리스트를 만들어서 원하는 클라이언트를 찾아서 통신하시면 되겠죠. 물론 이 리스트의 아이템들에는 AThread(TIdPeerThread)값을 가지고 있어야지 어떤 클라이언트인가를 구별하겠죠...
    이 방식은 프로토콜만 잘 정의하시면 됩니다. 예를 들면 중계서버와 말단 서버간에 통신할때 앞에 클라이언트의 IP를 붙여준다면 중계서버에서 말단서버로 데이터를 보낼때 말단 서버는 이 IP를 가지고 어떤 클라이언트에서 데이터가 왔는지 알 수가 있고, 말단서버에서 중계서버로 데이터를 보낼때도 역시 중계서버는 어떤 클라이언트로 데이터를 보낼지 알 수 있기때문에 위에서 구성한 리스트에서 클라이언트를 찾아서 원하는 클라이언트로 데이터를 보낼수가 있죠...

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

    • 유창원
      2002.12.30 21:19
      구석구석 찾아보니 답이 있군요. 연말을 뜻있게 보내시기 바랍니다. ^^
    • 박재용
    • 2002.12.23 20:42
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이훈
      2002.12.23 20:37
      !000-9000-0000;1;_ 아마 이것을 묻는것 같은데요   0 인것을 9로 바꾸면 입력 안해도 됩니...
    • 열심히
      2002.12.23 21:30
      핸드폰번호를 분류하자면.. xxx-xxxx-xxxx, xxx-xxx-xxxx, 이렇게 두가지가 나올수 있죠.. 이걸 물어...
    • 박성훈
      2003.01.16 22:22
      인터베이스의 단점중의 하나는 함수가 빈약하다는 겁니다. substr도 기본내장이 아니라 Udf로 등록해서 ...
    • 도니
    • 2002.12.23 19:33
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.12.23 20:11
      안녕하세요. 최용일입니다. 전송데이터가 텍스트면 기본소켓에서 보낼때 문자열끝에 전부 캐리지리턴(#1...
    • 도니
      2002.12.23 21:19
      답변감사합니다.. 덕분에 실마리를 풀어서 어느 정도 진전이 있었습니다.. 그리고 추가 질문이 뭐냐면...
    • 최용일
      2002.12.23 21:50
      안녕하세요. 최용일입니다. 중계서버가 어떤방식으로 말단서버로 연결을 하는지에 따라서 방법이 달라지...
    • 델사랑
    • 2002.12.23 18:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • LuckyBoy
      2002.12.23 21:14
      질문을 보고 일반 디비그리드를 사용해서 테스트를 해보았는데.. 결과는 아무이상없이 출력이 되거든요.. ...
    • 콤보
      2002.12.23 22:30
      만약 프로그램에서 DB(오라클, ms-SQL)을 사용하신다면 쿼리문을 이용하여 넘겨 받는 방법이 있을 것 같습...
    • LuckyBoy
      2002.12.23 21:06
      트리를 이용하여 연산을 하는 방법도 있지만.. 예전에 연산자와 피연산자를 Stack에 넣고 연산을 처리했...
    • 최용일
      2002.12.23 20:15
      안녕하세요. 최용일입니다. 트리로 만들어서 계산하세요...       &n...
    • 세라핌
    • 2002.12.23 08:47
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김수경
      2002.12.23 22:18
      테스트 해 보니 잘 되는 군요 ㅡㅡ; 비교하는 RGB 값이 올바른지 확인해 보세요. 참고로 그림내 특정 ...
    • 세라핌
      2002.12.23 22:27
      포토샵에서 색을 골라서 하니까 되네요. 전에는 색뽑아내는 프로그램으로 했는데 이건 값이 제대로 안나왔...
    • 곽효근
      2002.12.23 22:05
      잘되는데.. 어느부분이 않된다는것인지요?? 아마도 if문의 생상의 값이 잘못된거같습니다. RGB값을 ...
    • 최진안
    • 2002.12.23 07:12
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 2002.12.23 08:12
      DBGrid가 그려질때 호출되는 OnDrawColumnCell이라는 이벤트를 이용해보세요. 이 이벤트의 파라미터를 ...
    • DelChoBo
      2002.12.22 07:46
      흠냐.. 그런건 디비 그리드에서 바꾸는게 아니구.. 테이블이나 쿼리 컴포에서 찾아 보시면 계산된 필드 란...
    • 홀로서기
      2002.12.23 05:35
      감사합니다... 근데요... 어떻게 구현하는지.... 델 초보라서 너무 막막하네요...ㅠㅠ;; calculate fie...
    • DelChoBo
      2002.12.23 19:50
      질문을 늦게 봤네요.. 덕분에 답도.. ^^ calculate field를 만드셨다니까 쉬우실텐데.. table1에 sung...
    • 홀로서기
      2002.12.23 21:06
      감사,,, 감사  ^^;; 됩니다... DelchoBo님의 글들은 많이 읽고 도움 받았습니다.. 많은 도움이...
    • 하병준
    • 2002.12.22 03:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • DelChoBo
      2002.12.22 07:52
      쿼리 컴포를 쓰신다면 request live 속성이 False 인지.. 쿼리문에 join이나 order 문 등이 사용되는지 보...
    • 양용성
      2002.12.22 04:00
      //Memo1 내용 select * from :tbname Memo1 의 쿼리 부분에 :tbname 옆에 텝이 없도록 조심하십시오. :tb...
    • 지라기
      2002.12.22 03:57
      Memo1 내용 select * from :tbname Query1.ParamByName('tbname').AsString:=     ...
    • 도니
    • 2002.12.21 22:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 도니
      2002.12.24 21:36
      날라오는데이터에 종료표시(엔터)가 없으면 계속 받더군여.. 종료표시 넣음으로써 해결했습니다.
    • 김지엽
      2002.12.21 19:58
    • NiceSky
      2002.12.21 21:00
    • 김지엽
      2002.12.22 03:28
    • 김지엽
      2002.12.22 13:39
    • NiceSky
      2002.12.23 19:03
    • 김지엽
      2002.12.24 00:30
    • NiceSky
      2002.12.24 00:52
    • • • •
    • 이정은
    • 2002.12.21 19:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김지엽
      2002.12.21 20:08
      TObject라는 것은 모든 '객체'의 조상입니다. 버튼의 조상이기도 하고, 폼의 조상이기도 하죠. 그러니깐, ...
    • 강의식
    • 2002.12.21 09:19
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김봉식
      2002.12.21 22:55
      테이블은 열리는데 자료가 안나오는것인지 아니면 열리질 않는것인지 연결은 어떤방법으로 한것인지.. ...
    • 강의식
      2002.12.21 23:03
      서버 : 윈도우 2000 어드벤스 서버 데이터베이스 : ms-sql 2000 server 델파이 5.0 사용 클라이언트에서...
    • 열심히
      2002.12.23 22:01
      근데 정말로 등록된게 맞습니까?? 그것부터 확인을 하심이..좀 한심한 답변이기는 하지만 등록은 됐는데...