飞鸽传送文件有关问题 求教
飞鸽传送文件问题 求教!
写了一个类似于飞鸽的文件传输程序,但是最近出了点问题。发送端发送完毕之后,接收端接收到的文件显示0KB,但是在我关闭程序之后,文件的大小恢复了。
测试了一下,是卡在这段程序上了,不知道如何解决(之前不存在这个问题)? 不知道是网络流问题还是文件流的问题?各位大神求解啊 0 0
//接收端
while (true)
{
byte[] data = TransferFiles.ReceiveVarData(socketClinet);
if (data.Length == 0)
{
break;
}
else
{
datapa = TransferFiles.ReceiveVarData(socketClinet);
for (j = 0; j < size; j++)
temp[SendedCount * size + j] = datapa[j];
SendedCount++;
//将接收到的数据包写入到文件流对象
MyFileStream.Write(data, 0, data.Length);
}
}
问题就是关闭程序之后,文件才能整合完毕。
==========================================================================================
以下是发送端:
for (int i = 0; i < PacketCount; i++)
{
//从文件流读取数据并填充数据包
EzoneStream.Read(data, 0, data.Length);
//发送数据包
EzoneModule.SendVarData(client, data);
//进度条值的显示
this.pbUpload.PerformStep();
//停顿
Thread.Sleep(50);
}
//如果还有多余的数据包,则应该发送完毕!
if (LastDataPacket != 0)
{
data = new byte[LastDataPacket];
EzoneStream.Read(data, 0, data.Length);
EzoneModule.SendVarData(client, data);
this.pbUpload.Value = this.pbUpload.Maximum;//进度条
}
------解决思路----------------------
因为 你的 MyFileStream 在break 的时候没有 关闭
所以 你看到的时候 是不全的 他没有把缓存刷入文件 而你关闭程序的时候 他才去把缓存刷入
MyFileStream.Flush() 手动把缓存刷入文件
写了一个类似于飞鸽的文件传输程序,但是最近出了点问题。发送端发送完毕之后,接收端接收到的文件显示0KB,但是在我关闭程序之后,文件的大小恢复了。
测试了一下,是卡在这段程序上了,不知道如何解决(之前不存在这个问题)? 不知道是网络流问题还是文件流的问题?各位大神求解啊 0 0
//接收端
while (true)
{
byte[] data = TransferFiles.ReceiveVarData(socketClinet);
if (data.Length == 0)
{
break;
}
else
{
datapa = TransferFiles.ReceiveVarData(socketClinet);
for (j = 0; j < size; j++)
temp[SendedCount * size + j] = datapa[j];
SendedCount++;
//将接收到的数据包写入到文件流对象
MyFileStream.Write(data, 0, data.Length);
}
}
问题就是关闭程序之后,文件才能整合完毕。
==========================================================================================
以下是发送端:
for (int i = 0; i < PacketCount; i++)
{
//从文件流读取数据并填充数据包
EzoneStream.Read(data, 0, data.Length);
//发送数据包
EzoneModule.SendVarData(client, data);
//进度条值的显示
this.pbUpload.PerformStep();
//停顿
Thread.Sleep(50);
}
//如果还有多余的数据包,则应该发送完毕!
if (LastDataPacket != 0)
{
data = new byte[LastDataPacket];
EzoneStream.Read(data, 0, data.Length);
EzoneModule.SendVarData(client, data);
this.pbUpload.Value = this.pbUpload.Maximum;//进度条
}
------解决思路----------------------
因为 你的 MyFileStream 在break 的时候没有 关闭
所以 你看到的时候 是不全的 他没有把缓存刷入文件 而你关闭程序的时候 他才去把缓存刷入
MyFileStream.Flush() 手动把缓存刷入文件