Я пытаюсь записать некоторые данные в сокет необработанных данных (около 22 МБ). Сценарий такой: -
- Открыть локальный файл
- Чтение фрагмента байтов.
- Запишите это в сокет
- Повторяйте 2 и 3 до конца файла.
Теперь проблема в том, что мой код (ниже) не передает полный файл. Это передает, возможно, 3 из 22 МБ с моим тестовым файлом. Однако трассировка завершена и показывает полные передаваемые данные. Я подозреваю, что, возможно, он начинает писать следующий блок перед завершением текущего (хотя я не уверен).
while(fs.bytesAvailable > 0){
var readAmount = (fs.bytesAvailable < socketBufferSize) ? fs.bytesAvailable : socketBufferSize;
seq++;
air.trace(">"+seq+" WritePacket "+readAmount+" "+fs.position+" "+fs.bytesAvailable);
fs.readBytes(bytes, 0, readAmount);
air.trace(bytes.length);
socket2.writeBytes(bytes, 0, bytes.length);
socket2.flush();
}
fs.close();
socket2.close();
Выше приведен код, который я должен использовать. Я хотел бы знать, делаю ли я что-нибудь правильно / неправильно.
Вставка принудительной задержки между итерациями записи гарантирует, что файл будет полностью передан, как указано во фрагменте ниже. Однако это не приемлемое решение. Я хотел бы знать, есть ли какое-то событие, на которое я должен подписаться или что-то нужно сделать по-другому. Сервер на другом конце - FTP-сервер FileZilla.
var sendData = function (){
if(fs.bytesAvailable > 0){
var readAmount = (fs.bytesAvailable < socketBufferSize) ? fs.bytesAvailable : socketBufferSize;
seq++;
air.trace(">"+seq+" WritePacket "+readAmount+" "+fs.position+" "+fs.bytesAvailable);
fs.readBytes(bytes, 0, readAmount);
air.trace(bytes.length);
socket2.writeBytes(bytes, 0, bytes.length);
socket2.flush();
}
else{
air.trace("Closing Connection");
fs.close();
socket2.close();
}
}
var interval = setInterval(sendData, 100);
Спасибо