Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Передача файла с использованием KOLICS - KOLWSocket   Найти похожие ветки 

 
omegaB ©   (2004-08-18 15:50) [0]

Доброе время суток!
Я переписываю свою приложение под KOL.
Произошел затык в передаче файла от Сервера к клиенту.

Старый код :

 -- На Сервере:
  ...
   fs:=TFileStream.Create("C:\SKLAD\Sklad.exe", fmOpenRead);
  try
   fs.Position:= 0;
   Socket.SendText("Size:"+IntToStr(fs.Size) + #0);
   Socket.SendStream(fs);
  finally
  end;
 ...

 -- На Клиенте :

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
s, sl: string;
begin
s:= Socket.ReceiveText;

 if Reciving = False then
 begin
  sMemo1.Lines.Add( s );
 end;

if Reciving then
 begin
  fs.Write(s[1], length(s));
  if fs.Size=DataSize then
   begin
    fs.Free;
    Reciving:=false;
    Application.MessageBox("Обновление загружено", "Внимание!!!");
   end;
  exit;
 end;

if copy(s, 1, 5)="Size:" then
 begin
  sl:=copy(s, 6, Pos(#0, s)-6);
  DataSize:= StrToInt(sl);//Str2Int(s1);
  Delete(s, 1, Pos(#0, s));
  Reciving:=true;
  fs:=TFileStream.Create("Sklad.new",fmCreate);
  fs.Write(s[1], length(s));
 end;

end;

  Работает прекрасно, подскажите, как мне передать файл если я использую KOLWSocket .

Если можно - пример кода.

Заранее Вам благодарен.


 
SPeller ©   (2004-08-19 06:59) [1]

Напиши как пробовал, и где и что у тебя там не получается.


 
omegaB ©   (2004-08-19 15:16) [2]

Пробую я так :

Var    fs: TFileStream; // Буфер для файла
      CliSocket : PWSocket;
.....

fs:=TFileStream.Create("C:\SKLAD\Sklad.exe", fmOpenRead);
try
   fs.Position:= 0;
   CliSocket.SendStr("Size:"+IntToStr(fs.Size) + #0);
   CliSocket.Send(fs, fs.Size);

   CliSocket.SendStr(#13 + #10+ "Файл отправлен." + #13 + #10);
  finally
    CliSocket.SendStr(#13 + #10+"ERROR - ошибка отправки файла!!!" + #13 + #10);
  end;
U>


 
omegaB ©   (2004-08-19 16:32) [3]

Файл не передается :(


 
Gandalf ©   (2004-08-19 20:42) [4]

Мы об KOLICS говорим?

Тогда откуда
fs: TFileStream; // Буфер для файла
?
И с какой стати
CliSocket.Send(fs, fs.Size);
будет работать?
Send шлет данные при условии что fs указатель...


 
omegaB ©   (2004-08-20 19:15) [5]

А так правильно?

Var
 vFile : TMemoryStream;
  ....
   vFile := TMemoryStream.Create;
   vFile.LoadFromFile("C:\SKLAD\Sklad.exe");
   
   CliSocket.SendStr("Size:"+IntToStr(vFile.Size) + #0);
   CliSocket.Send( vFile.Memory ,vFile.Size );


 
nicesc   (2004-08-21 12:30) [6]

omegaB ©
http://kol.mastak.ru/files/art/lessons11.htm


 
omegaB ©   (2004-08-24 12:34) [7]

Спасибо за помощь!

Попробовал так :

TransmFile := NewMemoryStream; //создаем поток
  Resource2Stream(TransmFile,HInstance,"C:\SKLAD\Sklad.exe",RT_RCDATA);
  TransmFile.Position := 0;
  CliSocket.SendStr("Size:"+IntToStr(SizeOf(TransmFile.Data)) + #0);
   CliSocket.PeekData(TransmFile.Memory, SizeOf(TransmFile.Data));

 //и ак пробовал:  CliSocket.Send(  TransmFile.Memory, SizeOf(TransmFile.Data));

  TransmFile.free;


Нифига не работает.... :(

Потом сделал так :

procedure FastFileSend(Const fname: String );
Var
 hmem, hFile : THandle;
 size : LongInt;
 p : Pointer;
Begin
 hFile := FileOpen( fname, fmOpenRead );
   try
    size := FileSeek( hFile, 0, 2 );
    FileSeek( hfile, 0, 0 );

     If size > 0 Then
      Begin

       hmem := GlobalAlloc( GHND, size );

   If hMem <> 0 Then
   Begin

    p := GlobalLock( hMem );

    If p <> Nil Then
     Begin
     _hread( hFile, p, size );
      GlobalUnlock( hMem );

      CliSocket.SendStr("Size:"+IntToStr(size) + #0);
      CliSocket.Send( p, size );

     End
    Else
     GlobalFree( hMem );

   End;

      End;

   finally
   FileClose( hFile );
   end;

end;


Наконец-то РАБОТАЕТ !!!

Люди добрые!!! Подскажите минусы моего способа.
А со STREAM не получается, но очень хочется разобраться.
Помогите плз.


 
Gandalf ©   (2004-08-24 20:04) [8]

CliSocket.PeekData(TransmFile.Memory, SizeOf(TransmFile.Data));
Это полная чушь...

//и ак пробовал:  CliSocket.Send(  TransmFile.Memory, SizeOf(TransmFile.Data));

Пришли мне на мыло клиент и сервер - я посмотрю, самому набивать лень...



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
3-1109250427
tradakad
2005-02-24 16:07
2005.03.27
проблема с ADO


14-1110016285
Гаврила
2005-03-05 12:51
2005.03.27
Перлы из резюме :-)


1-1111072135
eugene32
2005-03-17 18:08
2005.03.27
StrToInt( a ) - как отключить появление сообщения об ошибке?


14-1110452824
1008
2005-03-10 14:07
2005.03.27
Есть ли у Mac и Unix что-то общее?


14-1109928883
DelphiN!
2005-03-04 12:34
2005.03.27
Проблемма после переустановки версии компонентов