Q&A

  • midas를 이용한 파일 전송. 꼭좀 읽어주세요.
안녕하세요

질문이 있어 이렇게 글을 올립니다.

현재 제가 만들려고 하던 프로그램은 midas를 이용한 파일전송 기능이
들어가있는 프로그램입니다.

클라이언트에서 TFileStream 으로 불러들인 파일을 string으로 저장한후 그 string을
서버쪽에서 받아 다시 이진파일의 형태로 풀어 내려합니다.

제가 이제 걸음마 단계의 초보라.... 아직 해결못하고 있습니다.

아래는 소스입니다. 일단은 1byte씩 전송하는 구조로 해보았습니다.
이 소스로 실행해보았을때는 첫 4바이트 가량은 잘 전달되는데 그 이후부터
잘못된 데이터가 저장되는듯합니다.

도움이 필요합니다.

----------------------서버------------------------------------------
var fstream:TFileStream;

procedure TMidasTest.SendBitmap(data: OleVariant);
var
S:string;
begin
case strtoint(data[1]) of
  1:
  begin
   fstream := TFileStream.Create(data[2],fmCreate);
  end;
  2:
  begin
   S := data[2];
   fstream.Write(S[1],1);
  end;
  3:
  begin
   fstream.Free;
  end;
end;



--------- 클라이언트 ------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
stream:TFileStream;
FileString:string;
i:integer;
Pakit: Variant;
begin
stream := TFileStream.Create('c:7799.bmp',fmOpenRead);
Pakit := VarArrayCreate([1, 3], varVariant);

SetLength(FileString,stream.size);
stream.Position := 0;
stream.Read(FileString[1], Length(FileString));
Pakit[1] := '1';
Pakit[2] := 'c:test_7799.bmp';
Pakit[3] := '0';
SocketConnection1.AppServer.SendBitmap(Pakit);

i := 1;
while i<=stream.size do
begin
    Pakit[1] := '2';
    Pakit[2] := FileString[i];
    Pakit[3] := '1';
    SocketConnection1.AppServer.SendBitmap(Pakit);
    i := i+1;
end;
stream.Free;
Pakit[1] := '3';
Pakit[2] := 'c:test_7799.bmp';
Pakit[3] := '0';
   SocketConnection1.AppServer.SendBitmap(Pakit);
end;

1  COMMENTS
  • Profile
    버섯 2002.01.12 01:55

    너무어렵게 생각하시는거 아닌지 모르겠네요..

    제가봐도 소스에 무리가 좀 있는듯합니다.

    while i<=stream.size do
    begin
        Pakit[1] := '2';
        Pakit[2] := FileString[i];
        Pakit[3] := '1';
        SocketConnection1.AppServer.SendBitmap(Pakit);  
        i := i+1;
    end;

    여기 루프로돌리면.. 문제가 생길듯 싶네요.. SendBitMap 에서 리턴값을 받아서 한번처리해보시죠.. 그러니까.. 전송이 제대로 되었다는 리턴값을 받아서 정상적으로 받았을때 루프를 돌려보세요.. 그럼 될거 같은데요...

    그런데 위의 방법보다는 그냥 FTP나 socket 을 이용해서 따로 전송하는게 훨씬 좋은 방법인거 같은데..  특별한 이유가 있습니까?

    그럼.. 좋은답변이 아니라서 죄성...