当多个客户端尝试下载时,URL中的文件下载将停止

时间:2013-06-04 13:56:03

标签: java

我正在为我的游戏创建一个“修补程序启动器”,它会在您启动时自动下载最新版本的游戏。但是,当多个人同时尝试下载文件时,每个人的下载都会冻结并停止,并且只有在其他人关闭下载文件时才会恢复,并且每次只下载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);
}

1 个答案:

答案 0 :(得分:2)

您的下载代码看起来没问题,我没有看到任何竞争条件的原因,所以如果不对您的下载代码进行更深入的分析,我可以告诉您这个代码(客户端)不是问题。它必须是导致问题的服务器端,即您的网络服务器或介于其间的代理或防火墙。

此外,也许您应该查看JNLP,这是一项专门针对您的应用程序始终更新并在启动时检查此问题而设计的技术。