In the first iteration, you call
fs.Read(_FileName, 0, 1024);
This is good (although why you are calling Convert.ToInt32
on an int
, I don't know.)
In the second iteration you will call
fs.Read(_FileName, position, 2048);
which tries to read into the _FileName
byte _FileName
starting at position
(which is nonzero) and retrieves up to 2048 bytes. The byte array is only 1024 bytes long, so it cannot work.
Additional issues:
- You did not use the
using
statement, so on exceptions you will leave the stream open - You ignore the return value from
Read
, which means that you do not know how much of your buffer was actually read. - You unconditionally send the socket a full buffer, regardless of how much has been read.
Your code should probably look something like this:
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);
source share