JAVA的socket通讯传输文件,为什么第一次传输的文件总是相同,之后的再次传输MD5总是不相同

运行服务端,然后再运行客户端
传输的文件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了