c# - 使用 NetworkStream 错误地传输了较大的文件大小

标签 c# sockets file-transfer networkstream

我正在通过 NetworkStream 传输文件,似乎当文件超过 5-10k 时,文件开始丢失数据和/或有巨大的空白间隙。

这是我的:

private string ReadandSaveFileFromServer(TcpClient clientATF, NetworkStream currentStream, string locationToSave)
{
    int fileSize = 0;
    string fileName = "";
    int bytesRead = 0;

    fileName = ReadStringFromServer(clientATF, currentStream);
    fileSize = ReadIntFromServer(clientATF, currentStream);

    FileStream fs = new FileStream(locationToSave + "\\" + fileName, FileMode.Create);

    byte[] fileSent = new byte[fileSize];

    while (currentStream.DataAvailable)
    {
        if (clientATF.Connected)
        {
            bytesRead = currentStream.Read(fileSent, 0, fileSent.Length);
            fs.Write(fileSent, 0, fileSent.Length);
        }
        else
        {
            break;
        }
    }

    fs.Flush();
    fs.Close();

    return fileName;
}

最佳答案

不,您写错了缓冲区代码。乍一看,我建议您改用 fs.Write(fileSetn, 0, bytesRead)

关于c# - 使用 NetworkStream 错误地传输了较大的文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3919978/

相关文章:

c# - 使用 WrapPanel 添加一个 TextBox 作为 ItemsControl 的最后一个元素

c# - 继续获取 'The LINQ expression node type ' Invoke' 在 LINQ to Entities 的异常中不受支持

java - 服务器/客户端停止 1 个线程 = 1 个客户端

networking - 在两台相邻计算机之间传输文件的最快方法

c++ - OpenSSL 文件传输

c# - 在运行时以编程方式重写映射规则

c# - 使用 LINQ 选择字典 <T1, T2>

c# - 为什么 File.WriteAllBytes 不适用于 .db 文件但适用于 .csv 文件?

c - 线程 C 客户端-服务器聊天应用程序中 SIGSEGV 的未知原因

java - 如何在客户端和服务器之间传输多个文件?