Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Вниз

Передача файла с использованием 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 вся ветка

Форум: "KOL";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.049 c
1-1110886209
DEM_s
2005-03-15 14:30
2005.03.27
Версия exe шника


1-1110814646
Дельфин
2005-03-14 18:37
2005.03.27
Нахождение алгоритма распределения числа


1-1110895436
Mamed
2005-03-15 17:03
2005.03.27
UrlEncode


3-1109235317
Peter_cc
2005-02-24 11:55
2005.03.27
SQL>255 символов


6-1106273939
Cryon
2005-01-21 05:18
2005.03.27
Ошибка idpop3 socket error 10066





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский