我现在有一个非常奇怪的问题,我是如何通过套接字发送数据的。我的读取缓冲区正在获取我通过套接字发送的所有数据,但由于某种原因,我正在调用的File.Write或File.WriteAsync方法没有写入所有字节,或者只是停止(我认为这是问题)或者它可能是套接字有问题以及它们如何被读写。
所以这里是我的代码片段,请记住,这两个代码都在同一个文件中,但它们是不同的线程。
byte[] Buffer = new Byte[1024];
int bytesRead;
while((bytesRead = ReceiverSocket.Receive(Buffer)) > 0)
{
totalBytesRead += bytesRead;
//myDownload.Write(Buffer, 0, bytesRead);
myDownload.WriteAsync(Buffer, 0, bytesRead);
}
上面的代码是我的下载客户端的接收功能。请记住,无论我使用什么写法,我都会得到相同的结果。
我只是使用它:
byte[] fileData = File.ReadAllBytes(fileToSend);
serverSocket.SendFile(fileToSend);
我发送一个文件大小为10560的文件并实际检索接收循环中的所有字节,但是当我完成后检查我的文件时,它只收到这样的部分:
TotalBytesRead
1024
2048
3072 ...
... 8192
9216
10240
10560
这意味着它会读取所有数据,但是在我的程序中,它仍然停留在循环中,当我关闭它以检查文件大小时,它的大小是8192,所以在我看来它没有读取下一个3套接字流。
我为此感到茫然,有什么我做错了吗?这可能是我不知道的线程问题吗?
答案 0 :(得分:0)
我找到了答案,我锁定了我的
while((bytesRead = ReceiverSocket.Receive(Buffer)) > 0)
由于套接字总是等待接收,所以SendFile不一定会发送0,所以它总是卡在while循环中,但是我关闭了while,它写完了文件。