Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: socket  (Прочитано 6106 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Наталья
Гость
« : 24-06-2005 13:02 » new

Как передавать файлы через Socket'ы. Скинте примеры рабочие, please. Есть примеры, но они выдают ошибку на прием  - ошибка адреса:
{Посылка файла через сокет}
  procedure SendFileBySocket(filename: string);
   var srcfile: TFileStream;
  begin
    {Открываем файл filename}
    srcfile := TFileStream.Create(filename,fmOpenRead);
    {Посылаем его первому подключенному клиенту}
    ServerSocket1.Socket.Connections[0].SendStream(srcfile);
    {Закрываем файл}
    srcfile.Free;
  end;


{Прием файла через сокет}
  procedure TForm1.ClientSocket1Read(Sender: TObject;
    Socket: TCustomWinSocket);
   var l: Integer;
       buf: PChar;
       src: TFileStream;
  begin
    {Записываем в l размер полученного блока}
    l := Socket.ReceiveLength;
    {Заказываем память для буфера}
    GetMem(buf,l+1);
    {Записываем в буфер полученный блок}
    Socket.ReceiveBuf(buf,l);
    {Открываем временный файл для записи}
    src := TFileStream.Create('myfile.tmp',fmOpenReadWrite);
    {Ставим позицию в конец файла}
    src.Seek(0,soFromEnd);
    {Записываем буфер в файл}
    src.WriteBuffer(buf,l);
    {Закрываем файл}
    src.Free;
    {Освобождаем память}
    FreeMem(buf);                      (ОШИБКА!!!!! Выдается в этой строке.)
  end;
« Последнее редактирование: 17-12-2007 16:53 от Алексей1153++ » Записан
Серж
Гость
« Ответ #1 : 24-06-2005 13:19 » 

Насколько я понимаю, нужно вместо
Socket.ReceiveBuf(buf,l);
.....
src.WriteBuffer(buf,l);
писать
Socket.ReceiveBuf(buf^,l);
.....
src.WriteBuffer(buf^,l);
Записан
Наталья
Гость
« Ответ #2 : 27-06-2005 04:40 » 

Большое спасибо!!!! Все получилось.   Отлично  Целую
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines