Цитата:
Сообщение от Kotofff
Доброго времени суток !
А почему я не могу передать файлы более ~55Мб по вышеизложенному алгоритму ?
Т.е. все передается, но если файл более ~55мБ, то он по прибытию получается "битым", причем его размер правильный.
С Уважением.
|
Размер всегда будет правильный, вы же принудительно устанавливаете размер TMemoryStream по принятому в строке числу. Файлы правильнее передавать не через SendBuf, а через SendStream. И использовать нужно не TMemoryStream, а TFileStream.
В данном случае причин может быть 2:
1. Если установлен NonBlockingMode, дисконнект происходит до того как данные успеют уйти серверу.
2. Буфер передается драйверу, а у него память не резиновая - поэтому передавать за один раз такой несуразно большой буфер он может и отказаться, о чем сообщит ошибкой. Вы событие TCPClient.OnError обрабатываете? (WSA_NOT_ENOUGH_MEMORY = 8 Insufficient memory available. An application used a Windows Sockets function that directly maps to a Windows function. The Windows function is indicating a lack of required memory resources. Note that this error is returned by the operating system, so the error number may change in future releases of Windows.)
И еще у вас молоко убежало - в процедуре клиента stream не уничтожается.