невозможно получить полный файл на клиентском сервере tcp

1

Вот мой код сервера для чтения файла mp4 и отправки клиенту

Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 3400);
sock.Bind(ep);
sock.Listen(10);
sock = sock.Accept();
FileStream fs = new FileStream(@"E:\Entertainment\Songs\Video song\song.mp4",FileMode.Open);      
BinaryReader br = new BinaryReader(fs);

byte[] data = new byte[fs.Length];
br.Read(data, 0, data.Length);
sock.Send(data);
fs.Close();
sock.Close(); 

Вот код клиента

sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 3400);
sock.Connect(ep);
MemoryStream ms = new MemoryStream();             
int size = 3190551; // I know the file size is about 30 mb
int rec;
while (size > 0)
{
        byte[] buffer;
        if (size < sock.ReceiveBufferSize)
        {
            buffer = new byte[size];
        }
        else
        {
            buffer = new byte[sock.ReceiveBufferSize];
        }
        rec = sock.Receive(buffer, 0, buffer.Length, 0);
        size = size - rec;
        ms.Write(buffer, 0, buffer.Length);                
}

byte[] data = ms.ToArray();
FileStream fs = new FileStream("E:/song.mp4",FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs)
bw.Write(data);
fs.Close();
sock.Close();

** В конце я просто получаю данные в диапазоне от 3 до 4 мб.... им новый для программирования сокетов, и я не знаю, где проблема... независимо от того, отправляет ли она ее или получает !!!! похоже, что я получаю только один фрагмент данных с серверной стороны **

  • 0
    внутренний размер = 3190551; это не 30мб! это около 3мб!
Теги:
sockets
ftp-client
memorystream

1 ответ

0
Лучший ответ

Я думаю, проблема здесь

int size = 3190551; // I know the file size is about 30 mb

вы читаете только 3190551 байт, который составляет 3.04mb, а не 30mb. попробуйте отправить длину вашего файла в начале вашего сообщения, чтобы клиент знал, сколько байтов он должен получить от сервера.

  • 0
    да, это должно было быть 31905511 .... Я попробовал это, но теперь он добавляет немного мусора на 4-5 МБ больше, чем размер файла, который искажает, повреждая мой файл ... большое спасибо за ваш ответ
  • 0
    попытайтесь отправить длину вашего файла в начале вашего сообщения, чтобы клиент знал, сколько байтов он должен получить с сервера.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню