Главная страница
    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.043 c
1-1110614327
New_user
2005-03-12 10:58
2005.03.27
как можно загрузить web страницу из интернета в tmemo,


14-1110319566
ArMellon
2005-03-09 01:06
2005.03.27
GeForce2 MX VGA BIOS где найти дрова?


1-1110837724
phobos
2005-03-15 01:02
2005.03.27
Работа с ListBox


9-1104491956
Kein
2004-12-31 14:19
2005.03.27
боты


1-1111061635
Быстрый Шу
2005-03-17 15:13
2005.03.27
Приведение типа Variant





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский