关于Socket接收二进制流的字节数不一致的问题?(急!!!)
各位大侠:
我从server端接收二进制的流文件,然后写到文件中去。确认网络和数据没有问题,本来是512个字节,可怎么一直接收的长度不对,有时503、504、510等。
请教具体的接收算法和写文件的方法,解决立即给分,在线等待。
------解决方案--------------------服务器端最后flush了吗?
------解决方案--------------------冒似听说过类似问题,帮顶一下。
------解决方案--------------------要flush的哦
------解决方案--------------------tcp/ip栈的问题,建议你先写一个临时文件,或者读取固定的字节数(可以考虑循环读)
------解决方案--------------------服务器端可能没有传完吧
------解决方案--------------------楼主说的“503、504、510等”长度是不是指生成的文件的长度?
如果是的话,那请你注意了,很可能是二进制流中出现的 0D 0A 在文件中被写成了 0A。如果你的接收端程序是在 Linux 上的话,可能性就更大了……
------解决方案--------------------你是不是建了一个byte数组,然后读入再发送的吧??
我以前也是这样,不过不影响文件运行,
你可以一个个字节的读,
用BufferedInputStream read();
例如:
int data;
while((data=bin.read()) != -1)
{
// Socket发送
}
// DataOutputStream包装Socket
发送一个文件结束标志,
int endFile = -1;
例如: writeInt(endFile);
另一端利用DataInputStream包装Socket来接收
int endFile = readInt();
大概思路就这样,参考下