Q&A

  • Client가 Server에 동시 데이타 전송시 처리??( indy)
안녕하세요. 항상 도움을 많이 받고 있습니다. 다름이 아니라 여쭙고 싶은게 있어서요.

개발환경 : Widnows2000 Pro (Server)
               Windows2000 / Windows XP Home, Pro (Client)
                Delphi 5.0
               indy version 9.0.14 입니다.
              
클라이언트는 에서 서버로 데이타를 전송하는 프로그램입니다. 가공된 데이타를 StringList에 담아서 전송합니
다. Writeln, ReadLn method 를 이용하고 있습니다. 특정클라이언트를 지목해서 데이타 전송을 요청하면,
정확한 데이타가 서버로 들어옵니다. (서버쪽은 받자마자 StringGrid에 담았습니다.)
문제는 다중의 클라이언트를 선택하고, 데이타 전송 요청을 하면, 데이타가 서버로 들어는 옵니다만, 클라이언트
별 구분 아이디를 주었는데... 뒤죽박죽 섞여서 들어오다가 2000개의 정보를 Client가 전송했다면, 서버쪽에는
100개, 1000개, 1500 개 일정하지 않게 StringGrid 에 적혀집니다.
뭐 빼먹은게 있는건지... ㅠ.ㅠ
아래 코드는 서버쪽에서 접속된 클라이언트에 일괄 데이타 요청하는 부분입니다.
<!--CodeS-->
     case TreeView1.selected.Level of
      0 : begin
             try
               Client_List := Server.Threads.LockList;
               for kk := 0 to Client_List.Count -1 do
                    begin
                      try
                        TIdPeerThread(Client_List.Items[kk]).Connection.WriteLn('300');                  
                     except
                       TIdPeerThread(Client_List.Items[kk]).Stop;
                    end;
                 end;
           finally
           Server.Threads.UnlockList;
         end;
    end;

<!--CodeE-->

   클라이언트쪽에서 '300' 이라는 Protocol 을 받으면, 데이타를 전송하게 프로그래밍해뒀습니다.

   머가 문제일까요 ?

  혹 제가 빼먹은 것이 있는건지... 조언을 부탁드립니다.

  참고로, Windows XP 방화벽 쪽은 프로그램으로 잠시 중단했다가 전송이 완료되면 다시 방화벽이
  
  가동되도록 했습니다.  
1  COMMENTS
  • Profile
    한경수 2007.04.11 06:16
    열심히 들여다 보다보니...
    DB핸드링 하는 부분을 Server Execute 부분에 function 으로 넣었는데...
    그때마다 DB부분을 확인하고, 돌아오고 하는 과정을 반복하고 있었습니다.
    이런 실수를.... ㅠ.ㅠ

    그 부분을  Server Active 될때 한번만 체크하고 돌아오는 것으로 해결했습니다.
    좀더 들여다 봤어야 할것을...
    어찌됐든, Server 에서 데이타를 받을 때는 될수 있음 DB쪽을 핸들링 하지 않거나
    별도의  Thread 로 해결해야 함을 질문하면서 알았습니다.
    봐주신 분들 감사합니다. 꾸벅.