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

Вниз

Вот везде есть примеры как отправить поток данных по сети...   Найти похожие ветки 

 
Knight ©   (2004-11-07 01:40) [0]

... но нигде не попадается, как его принять... Кто знает?


 
mike-d ©   (2004-11-07 13:31) [1]

стою на асфальте я в лыжи обутый...
толи лыжи не едут, толи я еба...


 
Knight ©   (2004-11-07 16:15) [2]


> Knight ©   (07.11.04 01:40)
> ... но нигде не попадается, как его принять... Кто знает?

http://www.delphimaster.ru/articles/socksrv/index.html

Посылка файлов через сокет.
Здесь мы рассмотрим посылку файлов через сокет (по просьбе JINX-а) :-). Итак, как же послать файл по сокету? Очень просто! Достаточно лишь открыть этот файл как файловый поток (TFileStream) и отправить его через сокет (SendStream)! Рассмотрим это на примере:

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

Нужно заметить, что метод SendStream используется не только сервером, но и клиентом (ClientSocket1.Socket.SendStream(srcfile))


Отправить-отправили... а принять как? ReceiveBuf -есть... ReceiveText - есть... ReceiveStream - нет...


 
jack128 ©   (2004-11-07 16:51) [3]

я, вобщем то не сетевик, но вот это

TCustomWinSocket.ReceiveBuf
Reads up to Count bytes from the socket connection into the Buf parameter.

function ReceiveBuf(var Buf; Count: Integer): Integer;

наводит меня на определённые подозрения...


 
jack128 ©   (2004-11-07 16:56) [4]

Knight ©   (07.11.04 16:15) [2]
Отправить-отправили... а принять как? ReceiveBuf -есть... ReceiveText - есть... ReceiveStream - нет...


Естественно нету. Когда ты опровляешь поток - ты знаешь сколько байт нужно отправить, а когда читаешь - не знаешь..  Нужно перед отправкой переслать кол-во байт, а при приеме сначала считать это кол-во, а потом уже считывать сам поток.. Что нить типа этого.

{Открываем файл filename}
  srcfile := TFileStream.Create(filename,fmOpenRead);
  {Посылаем его первому подключенному клиенту}
  Count := srcfile.Count - srcfile.Position;
  ServerSocket1.Socket.Connections[0].SendBuf(Count, SizeOf(Integer));
  ServerSocket1.Socket.Connections[0].SendStream(srcfile);

  {Закрываем файл}
  srcfile.Free;

и читает
 with YourSocket do
 begin
   ReceiveBuf(Couunt, SizeOf(Integer));
   SetLength(Buff, Count);
   ReceiveBuf(Buff[1], Count); // Buff- string;
 end;


 
Knight ©   (2004-11-07 17:56) [5]


> [4] jack128 ©   (07.11.04 16:56)
> Естественно нету. Когда ты опровляешь поток - ты знаешь
> сколько байт нужно отправить, а когда читаешь - не знаешь..

Я нет... Но ведь компонент на то и компонент, что если разработчик реализует SendStream, то напрашивается и ReceiveStream... т.е. сам поток отправляешь, то сам его и получи, по кускам так по кускам, но склей как було... :)



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

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

Наверх




Память: 0.48 MB
Время: 0.028 c
4-1097089653
maxz
2004-10-06 23:07
2004.11.21
неубиваемый процесс


14-1099735110
Maxim____
2004-11-06 12:58
2004.11.21
Посоветуйте что почитать.


3-1098350727
Rule
2004-10-21 13:25
2004.11.21
Вот сморю и не пойму как использовать двоеточие в переменных в FB


3-1098197683
iat
2004-10-19 18:54
2004.11.21
Если спрятать колонку в DBGrid, то она исчезнет из отчета...


3-1098863018
Slon22
2004-10-27 11:43
2004.11.21
Поле типа DATE