![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как с помощью TClient(Server)Socket переслать файл ?? [D5]
Gerda © (2003-01-21 17:46:00)Дарова Мастера.
Вопрос такой - как с помощью TClient(Server)Socket переслать файл ??
Заранне благодарен.
Gerda (2003-01-23 21:01:00) [1]Спасибо всем, разобрался, зафтыкал я mrcat, с кем не бывает, все сделал с помощью цикла.
Verg (2003-01-22 11:48:00) [2]
> f:=TFileStream.Create(temp, fmOpenRead);
> servSock.Socket.Connections[0].SendStream(f);
> f.Free;
Help по SendStream читать не пробовали?
Note: The Stream passed as a parameter to SendStream becomes “owned” by the windows socket object. The Windows socket object frees the stream when it is finished with it. Do not attempt to free the stream after it has been passed as a parameter.
sndanil (2003-01-22 11:30:00) [3]Можно попробовать использовать API и воспользоваться функцией
BOOL TransmitFile(
SOCKET hSocket,
HANDLE hFile,
DWORD nNumberOfBytesToWrite,
DWORD nNumberOfBytesPerSend,
LPOVERLAPPED lpOverlapped,
LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,
DWORD dwFlags
);
насколько понимаю она предназначена для более быстрой передачи файла за счет передачи его в режиме ядра ...
mrcat (2003-01-22 00:25:00) [4]Gerda © (21.01.03 18:59)
...
и отсылает тока по 8 кил ?!?
...
А сколько надо??!!
Вы понимаете вообще, как передача данных организуется?
??? (2003-01-21 20:29:00) [5]Ну если дело действительно в размере буфера, тогда по идее надо организовать цикл - размер файла делится на 8192 - кол-во циклов
Новый цикл не начинается, пока не будет получен ответ от клиента о получении.
Gerda (2003-01-21 20:16:00) [6]Но тип интеджер более вместительный, даже если так, то как мне переслать файло ну например метров на 10 ??
??? (2003-01-21 20:09:00) [7]Скорее всего по 8192 байта , наверно файлюк большой и его размер в байтах больше чем размерность Integer;
Gerda (2003-01-21 20:02:00) [8]Так ведь len:=Socket.ReceiveLength (если я не ошибаюсь скока накачал), исходя из этого я и беру размер буфера. Передается чета по 8 кил, и до тех пор пока все не передастса, мож ServerType поставить другим ?? (у мя stNonBlocking стоит)
??? (2003-01-21 19:37:00) [9]Размер буфера мал
Socket.ReceiveBuf(buf^, len);
Gerda (2003-01-21 18:59:00) [10]Да вот тока покапался в архиве, нашел чтото,но чета оно не пашет, и отсылает тока по 8 кил ?!?
//------------------Это принимающая часть-------------------
var buf:Pchar;
f:TFileStream;
len:integer;
begin
if SaveDialog.Execute then filename:=SaveDialog.FileName;
len:=Socket.ReceiveLength;
GetMem(buf, len+1);
Socket.ReceiveBuf(buf^, len);
f:=TFileStream.Create(filename, fmCreate);
f.Seek(0, soFromEnd);
f.WriteBuffer(buf^,len);
f.Free;
end;
//------------------Это отправитель-------------------
f:=TFileStream.Create(temp, fmOpenRead);
servSock.Socket.Connections[0].SendStream(f);
f.Free;
//----------------------------------------------------
Че не так ??
Polevi (2003-01-21 17:51:00) [11]send, recv