안녕하세요
질문이 있어 이렇게 글을 올립니다.
현재 제가 만들려고 하던 프로그램은 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;
너무어렵게 생각하시는거 아닌지 모르겠네요..
제가봐도 소스에 무리가 좀 있는듯합니다.
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 을 이용해서 따로 전송하는게 훨씬 좋은 방법인거 같은데.. 특별한 이유가 있습니까?
그럼.. 좋은답변이 아니라서 죄성...