![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Receiveln [D7, WinXP]
neteditor © (2004-03-24 19:13:00)Ситуация простая: есть клиентская и серверная (TTCPServer) части. Клиентская отсылает по сокету бинарный файл (размер >300K). Однако при использовании Receiveln в нити серверной части, получается получить лишь ~900 байт. После чего прием оканчивается. Клиентская часть 100% отсылает информацию в полном объеме. Используемый код
buf: AnsiString;
....
buf := '';
f := TFileStream.Create(filename, fmCreate);
repeat
f.WriteBuffer(PChar(buf)^, Length(buf))
buf := AnsiString( ClientSocket.Receiveln(eof) );
until buf = '';
Где eof = '####end####' (в файле данная строка не встречается)
Посоветуйте чего-нить.
neteditor (2004-03-26 12:31:00) [1]Надоело мучаться с TTCPServer, взял старый TServerSocket + TWinSocketStream и все работает.
Спасибо за помощь :)
Rouse_ (2004-03-25 12:02:00) [2]Приведи полный код отправки и полный код приема
Fredericco (2004-03-25 11:55:00) [3]Я сам не инди юзаю, но может вот это поможет:
Use a custom time-out (ATimeout) value to change the number of milliseconds to wait for a response from the peer connection before a time-out occurs. The default value for ATimeout is IdTimeoutInfinite. See IdGlobal.pas for more information on constant timeout values.
Fredericco (2004-03-25 11:41:00) [4]Сорри :-)
neteditor (2004-03-25 11:30:00) [5]:)
The repeat statement executes its sequence of constituent statements continually, testing expression after each iteration. When expression returns True, the repeat statement terminates.
Но все равно спасибо :)
Fredericco (2004-03-24 19:27:00) [6]Толи лижи, толи я. (с) ЮЗ
Какой логический смысл вот этого:
buf := AnsiString( ClientSocket.Receiveln(eof) );?
until buf = '';
Ты ж как только чего-нить получишь, сразу получишь False в условии цикла.