【发布时间】:2014-06-11 17:39:30
【问题描述】:
我正在使用以下代码通过 tcp 发送文件。
如果我连续多次发送同一个文件以测试它是否可靠,我会正确接收第一个文件,而另一个则搞砸了。
所有混乱的文件都有相同的不正确字节,如果我睡眠(一段时间)所有文件都正确传输。我注意到我必须在读取文件时实例化一个新缓冲区才能正确完成所有工作。但我不明白为什么。
我担心我重新实例化缓冲区的解决方案可能只是隐藏了另一个主要问题。有什么建议吗?
using(var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
{
using(var binaryReader = new BinaryReader(fileStream))
{
var _sendingBuffer = new byte[BUFFER_SIZE];
int length = (int)fileStream.Length;
int bytesRead = 0;
//Ensure we reached the end of the stream regardless of encoding
while (binaryReader.BaseStream.Position != binaryReader.BaseStream.Length)
{
bytesRead = binaryReader.Read( _sendingBuffer, 0, _sendingBuffer.Length);
_socket.BeginSend(_sendingBuffer, 0, bytesRead, SocketFlags.None, SendFileCallback, null);
//without this i received some messed up data
_sendingBuffer = new byte[BUFFER_SIZE];
}
}
}
【问题讨论】:
-
根据答案,发送部分是错误的。也许接收部分也坏了。贴出代码。
-
请注意,依赖 HTTP 等标准协议更容易。套接字很难使用。
-
实际上发送和接收部分都在工作,我不是在寻找完成这些工作的方法。我不能使用 Http 我在很多方面都受到环境、要求和策略的限制(WinCE)
标签: c# tcp networkstream