java.net.SocketInputStream.socketRead0(本机方法)

java.net.SocketInputStream.socketRead0(本机方法),java,httpwebrequest,serversocket,Java,Httpwebrequest,Serversocket,这是我的功能代码,如果网络断开, 代码将进入异常状态。 我向异常写入重试函数。 userValue=0,表示重试,1表示取消 HttpURLConnection uc = null ; URLPath = ""; URL url = new URL(URLPath); uc = (HttpURLConnection) url.openConnection(); uc.setReadTimeout(10000); uc.connect(); FileOutputStream fos = new F

这是我的功能代码,如果网络断开, 代码将进入异常状态。 我向异常写入重试函数。 userValue=0,表示重试,1表示取消

HttpURLConnection uc = null ;
URLPath = "";
URL url = new URL(URLPath);
uc = (HttpURLConnection) url.openConnection();
uc.setReadTimeout(10000);
uc.connect();
FileOutputStream fos = new FileOutputStream(savePath);
InputStream in = uc.getInputStream();
byte[] buffer = new byte[1024];
int Length = 0;
long FinishedLenth = 0;

while((Length = in.read(buffer)) > 0) {
    FinishedLenth = FinishedLenth + Length;
    fos.write(buffer, 0, Length);
}
uc.disconnect();
in.close();
fos.close(); 
嗨,我有麻烦了。 我写的代码和功能是下载。 若网络断开,用户可以选择重试或取消。 但是我得到了错误信息

int userValue = gm.GetIt("Error");
if(userValue == 0){
 gp.interrupt();
 uc.disconnect();
 downloadFile(local,nas,ip,id,pw,fileId,index);
}
else{
 conf.downloadState.get(index).setpercent("fail");
 return false;
}
第54行是while……

尝试设置HttpURLConnection的连接,并尝试重新设计while循环,如:

java.net.SocketTimeoutException: Read timed out  
    at java.net.SocketInputStream.socketRead0(Native Method)  
    at java.net.SocketInputStream.read(Unknown Source)  
    at java.io.BufferedInputStream.fill(Unknown Source)  
    at java.io.BufferedInputStream.read1(Unknown Source)  
    at java.io.BufferedInputStream.read(Unknown Source)  
    at sun.net.www.MeteredStream.read(Unknown Source)  
    at java.io.FilterInputStream.read(Unknown Source)  
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)  
    at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)  
    at Download_File.downloadFile(Download_File.java:54)  
    at downloadFileFunctionThread.run(downloadFileFunctionThread.java:113)  
检查java参数

它也可以设置如下


-Dsun.net.client.defaultConnectTimeout=12345-Dsun.net.client.defaultReadTimeout=67890

表示网络仍处于断开状态。连接的网络是否每次都成功?是的,如果选择“重试”,则网络已连接。它将再次下载。我想可能会转到“异常”,然后选择“重试”,它将再次调用相同的下载功能,并发生错误。如果我下载了一个文件,网络已经连接,错误就不会发生。
//...
boolean connected = false;
boolean retry = false;

while(!connected & retry) {
    retry = askUserIfHeWantsToRetry();
    connected = uc.connected();
    URL url = new URL(URLPath);
    uc = (HttpURLConnection) url.openConnection();
    uc.setReadTimeout(10000);
    uc.connect();
}
//...