运行服务端,然后再运行客户端
传输的文件MD5值相同
不关闭服务端,再第二次第三次……运行客户端 MD5值不相同,传输的文件与原文件的大小也不一样
但第二第三次……的传输文件都是相同的且与原文件不同,这是什么原因 emo了
void work()
{
try
{
BufferedReader socketInput = new BufferedReader(new InputStreamReader(client.getInputStream()));
int size = 30*1024;//每次传输kb
int byteread = 0;
File file = new File(path);
InputStream inputStream = new FileInputStream(file);
byte[] buf = new byte[size];
for (; (byteread = inputStream.read(buf)) != -1;)
{
socketOutput.write(buf, 0, byteread);
}
socketOutput.flush();
socketInput.close();
inputStream.close();
} catch (IOException e){
e.printStackTrace();
}finally
{
try {
if(client != null)
client.close();
} catch (IOException e){
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
Socket socket = null;
try
{
socket = new Socket();
socket.connect(new InetSocketAddress("192.168.3.2", 8101), 100000);
BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));
File file = new File(path);
if (file.exists()) file.delete();
file.createNewFile();
OutputStream PutFile = new FileOutputStream(file);
byte[] buf = new byte[30*1024];
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
int len;
for (;(len = dataInputStream.read(buf,0,1024*30))!=-1;kk++)
{
byte[] bytes_ = new byte[len];
for(int i=0;i<len;i++)
{
bytes_[i]=buf[i];
}
PutFile.write(bytes_);
}
} catch (IOException e) {
System.out.print(e.toString());
}finally
{
try {
if (socket != null)
{
socket.close();
}
} catch (IOException e) {
System.out.print(e.toString());
}
}
}
你不传md5,直接传一个字符串 看看客户机和服务器发送和接收的是什么。
研究了半天,终于解决了.....
估计是第一次运行服务端没有预加载会慢一些,客户端跟得上这速度
但不重启服务端,重新运行客户端,第二次执行的服务端速度太快,客户端没跟上这速度,前面几次服务端发送的内容没读取到
在服务端循环发送文件前加上 Thread.sleep(100); 就能每次都OK了