На первой итерации вы звоните
fs.Read(_FileName, 0, 1024);
Это хорошо (хотя почему вы звоните Convert.ToInt32
на int
, я не знаю.)
На второй итерации вы будете вызывать
fs.Read(_FileName, position, 2048);
, который пытается прочитать в байтовый массив _FileName
, начиная с position
(который не равен нулю) иизвлечение до 2048 байт .Массив байтов имеет длину всего 1024 байта, поэтому он не может возможно работать.
Дополнительные проблемы:
- Вы не использовали
using
оператор, поэтому при исключениях вы оставляете поток открытым - Вы игнорируете возвращаемое значение из
Read
, что означает, что вы не знаете, сколько вашего буфера имеет на самом деле прочитано - Вы безоговорочно отправляете сокету полный буфер, независимо от того, сколько было прочитано.
Ваш код должен выглядеть примерно так:
using (FileStream fs = File.OpenRead("D:\\06.Total Eclipse Of The Moon.mp3"))
{
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
sck.Client.Send(buffer, 0, bytesRead);
// Do you really need this?
Thread.Sleep(30);
}
}