我说一下看法。这两段代码如果上传有问题,应该是同一个。以客户端为例
1:len = sinReceive.read(buf);
2:System.arraycopy(buf, 0, bufData, 0, len);
我觉得对于第一句,应该搞清楚buf的状态,每一次循环buf的初始值是怎样?是不是应该清空(这一点我没看里面的程序无法肯定)?第二句受第一句的影响,错误的len值肯定会导致错误传递结果
1:len = sinReceive.read(buf);
2:System.arraycopy(buf, 0, bufData, 0, len);
我觉得对于第一句,应该搞清楚buf的状态,每一次循环buf的初始值是怎样?是不是应该清空(这一点我没看里面的程序无法肯定)?第二句受第一句的影响,错误的len值肯定会导致错误传递结果
soutUpload
服务器端:
sinReceive
这两个流在每次文件传输完成后要关闭,下次重新get();
byte[] buf;
while (true)
{
buf = new byte[4096];
len = sinReceive.read(buf);
// ...
}TO; heifei() 我在调用这两个方法的后面马上直接关闭了socket
fileToSocket(clientFile, clientSocket);
clientSocket.close();socketToFile(serverFile, serverSocket);
serverSocket.close();
客户端加上:
result = false;
}
}
soutUpload.close();//这句
}
finally
服务器端加上:
System.err.println("接收文件错误!");
}
}
sinReceive.close();//这句
}
finally
就完全没有问题
foutReceive.write(bufData);
你能确定每次写文件都是找文件的末尾为起点吗?
我觉得会覆盖原内容这就难怪出错了.
大侠,还是不行啊
int len;
while (true)
{
try
{
len = finUpload.read(buf);
if(len < 0)
break;
bufData = new byte[len];
System.arraycopy(buf, 0, bufData, 0, len);
soutUpload.write(bufData);
soutUpload.flush();
result = true;
}
catch(IOException e)
{
System.err.println("读取文件错误!");
result = false;
}
}
改成:
while( true ){
int nRead = finUpload.read( buffer );
if( nRead == -1 )
break;
outStream.write( buffer, 0, nRead );
}//接收端,把下面的:
while (true)
{
try
{
len = sinReceive.read(buf);
if(len < 0)
break;
bufData = new byte[len];
System.arraycopy(buf, 0, bufData, 0, len);
foutReceive.write(bufData);
foutReceive.flush();
}
catch(IOException e)
{
System.err.println("接收文件错误!");
}改成:
DataInputStream Receive= new DataInputStream( sinReceive);
while( true ) {
int nRead = inStream.read( buffer, 0, BUF_SIZE );
if( nRead == -1 )
break;
streamOutput.write( buffer, 0, nRead );
}
while( true ) {
int nRead = Receive.read( buffer, 0, BUF_SIZE );
if( nRead == -1 )
break;
foutReceive.write( buffer, 0, nRead );
}
1、把byte[4096];改小点
2、把文件传小点十几个字符吧
3、server端system.out出来看看传递是否正确
4、if 正确 { 查出写文件的问题 } else { 查出传的问题 }
我设置了一个计数器,发现服务器端接收数据的次数比客户端发送的次数要少3次(如果改变buf的大小,这个次数也会变,但总是少12k)。我改成发送文本文件,发现是丢失了前12k的字节。但客户端显示已经发送的字节数正确,而服务器接收的字节数又不对,到底是什么原因?