Q&A

  • Indy 파일전송에 관련해서 질문드립니다.
초보가되서 네트웍 플그램을 해보려니 많이 힘드네요 ^^;;
답까지는 바라지 않습니다. 그저 이러한 방법이 있다는
정도면 저는 행복하답니다 ^____^;;

1. 서버와 클라이언트는 항상 연결을 유지하여야 한다.
2. 서버가 클라이언트에게 혹은 클라이언트가 서버에게
   파일을 주고 받는다.
3. 2번과 마찬가지로 서로에게 멧세지를 주고받는다.
4. 클라이언트는 하나가 아니라 여러개이다.
5. 서로의 상태를 확인한다.
(접속이 끊어져 있다면 네트웍상에 존재하는지 여부)

1번의 경우에는 디스커넥을 않하면 되는거지만 2번을 하다보니
TFileStream으로 화일을 보낼때 연결을 끊지 않으면 화일이
저장되지 않더군요.. 그래서 생각한게 폼을 클라이언트와 서버에
폼을 한개씩 만들어서 하면 될것도 같은데 문제는 일방적으로 클라
이언트에서 서버로만 화일을 주는게 아니라 그 반대의 경우가
있다는게 문제더군요...  그리고 파일을 보낼때 그냥 스트림으로
보내려니 받는화일의 이름을 알 길이 없고 그렇다고 밑에처럼
레코드로 보내자니 스트림으로 받는 방법을 모르겠고.

type
  MyRecord : Packed Record
    FName : String;
    FStream : TFileStream;
end;

서로 연결을 유지하면서 파일을 전송하려면.. 즉, 파일을 보내고
디스커넥을 하지 않아야 하고 보낸 파일의 이름을 알 방법을 찾고
있습니다....
아..이거 진짜 사람 미칩니다. ㅠ.ㅠ


그리고 3번에서 서버야 Excute이벤트가 있으니까 상관없다지만
클라이언트 같은경우에는 위 이벤트가 없잔아요... 그래서 생각한게

Procedure GetThread.Execute;
Begin
  FreeOnTerminate := TRUE;
  While Not Terminated do
  Begin
    Command(StrToInt(frmClient.TCPClient.ReadLn('',100)));
  End;
End;

이런식으로 쓰레드로 계속 서버에서 읽어들이게 했는데 이러면
시스템에 무리가 갈듯도 하고... 으음.. 위의 방법이 맞는건지
아니면 다르게 하는건지 궁금합니다.

4번은 제가 듣기로는 인디가 스레드를 기본적으로 사용한다던데
스트림으로 화일을 받다보니 받는동안은 딱 하니 멈춰있더군요.
그걸 봐서는 스레드를 따로 선언해서 돌려야 할듯한데...
스레드를 따로 사용하는게 맞는지요....

그럼 고수님들의 약간의 팁좀 부탁드릴께요 ^^;;
2  COMMENTS
  • Profile
    왕초보 2004.03.08 23:10
    안녕하세요.
    저도 인디를 이용하여 서버/클라이언트를 구현하고 있는데...
    둘다 실행시키고 클라이언트로 서버에 접속하려고 하는데 에러가 나타나네요.
    고수님들 부탁해요.
    에고 주말에도 그거 잡느냐고 고심했는데. 안돼는데.. 이를 어쩌나..

  • Profile
    김대혁 2004.03.09 00:22

    자료실을 조회하면 indy 파일전송 프로그램이 있습니다