Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.027 c
4-1097321602
volser
2004-10-09 15:33
2004.11.21
Стандартные иконки


14-1099552719
Fay
2004-11-04 10:18
2004.11.21
Требуется программист


1-1099472659
Rule
2004-11-03 12:04
2004.11.21
Ну вот такой вопроски про QuantumGrid4


1-1100076837
markers
2004-11-10 11:53
2004.11.21
Плохо у меня с матиматикой... Делим на метры и т.д.


14-1099309827
ИМХО
2004-11-01 14:50
2004.11.21
Слово о Брюсе Ли




   Наверх