从TCP套接字接收不完整的文件

时间:2015-10-08 08:54:06

标签: c# file sockets tcp sendfile

我正在编写服务器 - 客户端应用程序,我在发送文件时遇到问题;有时转移是正确完成的,但很多时候#34;似乎"就像服务器(接收器)接收更少的字节并继续等待其他数据,而客户端已经完成发送所有文件。

这是发件人:

public void sendFile(String path) {
        FileInfo fi = new FileInfo(path);
        long fileDim = fi.Length;

        //Console.ReadLine();

        writer.WriteLine(Convert.ToString(fileDim));
        socket.SendFile(path);

    }

这是接收者:

public bool receiveFile(String path) {
        byte[] recievedData = new byte[1024];
        int bytesRead;

        long fileDim = Convert.ToInt64(reader.ReadLine());

        if (!Directory.Exists(Path.GetDirectoryName(path)))
            Directory.CreateDirectory(Path.GetDirectoryName(path));

        BinaryWriter bw = new BinaryWriter(File.Open(path, FileMode.Append));

        try {
            while (fileDim > 0) {
                bytesRead = socket.Receive(recievedData, recievedData.Length, SocketFlags.None);
                bw.Write(recievedData, 0, bytesRead);
                fileDim -= bytesRead;
            }
        }
        finally {
            bw.Close();
        }
    }

如果我取消注释" Console.ReadLine"在发送者身上(所以我在发送文件之前停止它几秒钟)一切正常。 所以看起来如果发送者太快,一些数据会丢失,但我知道这在TCP流中是不可能的......(为什么会发生这种情况?)

请提前帮助我

0 个答案:

没有答案