Java 当多个客户端尝试从URL下载文件时,文件下载停止

Java 当多个客户端尝试从URL下载文件时,文件下载停止,java,Java,我正在为我的游戏创建一个“补丁启动器”,当你启动游戏时,它会自动下载游戏的最新版本。但是,当多人同时尝试下载该文件时,每个人的下载都会冻结并停止,只有当其他人关闭下载的文件并且一次只有1人在下载时才会恢复。有人能帮忙吗?下面是我用来从URL下载文件的当前代码 public void saveUrl(String filename, String urlString) throws MalformedURLException, IOException { System.ou

我正在为我的游戏创建一个“补丁启动器”,当你启动游戏时,它会自动下载游戏的最新版本。但是,当多人同时尝试下载该文件时,每个人的下载都会冻结并停止,只有当其他人关闭下载的文件并且一次只有1人在下载时才会恢复。有人能帮忙吗?下面是我用来从URL下载文件的当前代码

public void saveUrl(String filename, String urlString)
        throws MalformedURLException, IOException {
    System.out.println("Downloading " + urlString);
    BufferedInputStream in = null;
    FileOutputStream fout = null;

    int currentdlsize = 0;
    int dlsize = new URL(urlString).openConnection().getContentLength();
    System.out.println("DL Size " + dlsize);

    in = new BufferedInputStream(new URL(urlString).openStream());
    fout = new FileOutputStream(filename);

    byte data[] = new byte[1024];
    int count;
    while ((count = in.read(data, 0, 1024)) != -1) {
        fout.write(data, 0, count);
        currentdlsize += count;
        System.out.println("Downloaded " + currentdlsize + "/" + dlsize);
        prog.setMaximum(dlsize);
        prog.setValue(currentdlsize);
        progstat.setText("Downloading at " + currentdlsize + "/" + dlsize);
    }

    in.close();
    fout.close();

    System.out.println("Downloaded to " + filename);
}

您的下载代码看起来还不错,我看不出有任何竞争条件的原因,因此,如果不深入分析您的下载代码,我可以告诉您,这段代码(客户端)不是问题所在。引起问题的必须是服务器端,即您的Web服务器或介于两者之间的代理或防火墙


此外,也许您应该看看,这是一种专门为您的问题而设计的技术,用于保持应用程序始终处于更新状态,并在启动时对此进行检查。

您使用的服务器端是什么?确保在引发任何异常的情况下,您都会注意到它。从这个方法无法区分这一点,因为它只是将异常抛出到下一个更高级别的调用中,我们无法看到代码如何处理异常。服务器端没有什么特别之处,我想它只是一个普通的Apache文件服务器。我在这方面的知识不多,但基本上我只是把游戏罐上传到我的网站,然后从那里下载补丁程序。此外,也没有引发任何异常,下载只是“暂停”每个人,只有当其他人退出应用程序并且您是唯一下载的人时才恢复。我设法通过删除:int-dlsize=new-URL(urlString).openConnection().getContentLength()解决了这个问题;但是现在我不知道有什么其他方法可以获得下载文件的大小,我可以用什么其他方法来获得下载文件的大小?你这样做是在打开两个连接。您应该调用
URL.openConnection()
来获取单个
HttpURLConnection
对象,然后从该对象获取内容长度和输入流。