C#socket接收传送文件的数据流,只能得到大概4M的大小。
如果一直读取文件的全部长度,当4M之后,用UE打开文件,发现后面保存的内容全部是0x00
socket的变量是temp
filelen=temp.Receive(datasize, 0, 4, SocketFlags.None);
int _filelen = BitConverter.ToInt32(filelen, 0); //通过读取自定义tcp头得前4个byte,获文件大小
int rescount = _filelen / packsiez; //获得要循环读取的次数
int lastpacksizi = _filelen % packsiez; //获得最后一个包的大小
if (lastpacksizi!=0)
{
rescount++;
}
string SendFileName = filesfolder + filename + ".rar"; //保存的文件名
int wcount=0;
using (FileStream MyFileStream = new FileStream(SendFileName, FileMode.Create, FileAccess.Write))
{
for (int i = 0; i <rescount; i++) //循环
{
if (temp.Connected)
{
if (i==rescount-1)
{
packsiez = lastpacksizi;
}
byte[] t=new byte[packsiez]; //声明一个byte数组
int counts= temp.Receive(t, 0, packsiez, SocketFlags.None); //接收内容
if (counts==0)
{
break;
}
MyFileStream.Write(t, 0, packsiez); //写入
wcount+=packsiez;
t = null;
}
else
{
break;
}
}
}