Главная страница
    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.48 MB
Время: 0.035 c
1-1110955876
Tankist
2005-03-16 09:51
2005.03.27
LISTVIEW - Как сортировать элементы не по 1-му столбцу, а по 2-му


1-1110790309
Sanich
2005-03-14 11:51
2005.03.27
Экспорт изFastReport.


1-1110196721
ctranik
2005-03-07 14:58
2005.03.27
Работаем с Thread-ми , очень нужно


14-1110358484
КаПиБаРа
2005-03-09 11:54
2005.03.27
Перед законом все не равны


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





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