Android java.net.SocketTimeoutException:连接超时
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android java.net.SocketTimeoutException:连接超时,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4248字,纯文字阅读大概需要7分钟。
内容图文
最近,我在程序中遇到以下错误:
11-18 12:30:30.259: W/System.err(21368): java.net.SocketTimeoutException: Connection timed out
11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.platform.OSNetworkSystem.connect(Native Method)
11-18 12:30:30.259: W/System.err(21368): at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:357)
11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:204)
11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:437)
11-18 12:30:30.259: W/System.err(21368): at java.net.Socket.connect(Socket.java:1002)
11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:75)
11-18 12:30:30.259: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48)
11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:322)
11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89)
11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:285)
11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:267)
11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:205)
11-18 12:30:30.269: W/System.err(21368): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:614)
11-18 12:30:30.269: W/System.err(21368): at com.example.simplevider.SimpleVideo$4.run(SimpleVideo.java:122)
11-18 12:30:30.279: W/System.err(21368): at java.lang.Thread.run(Thread.java:1019)
产生此错误的函数如下:
private void sendStuff() {
Log.e("sendStuff", "======================================");
new Thread(new Runnable() {
@Override
public void run() {
final int BUFFER_SIZE = 4096;
try {
File uploadFile = new File(existingFileName);
System.out.println("File to upload: " + existingFileName);
URL url = new URL(URL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setUseCaches(false);
httpConn.setDoOutput(true);
httpConn.setRequestMethod("POST");
httpConn.setReadTimeout(60*1000);
httpConn.setConnectTimeout(60 * 1000);
// sets file name as a HTTP header
httpConn.setRequestProperty("fileName", uploadFile.getName());
httpConn.setRequestProperty("extra-id", uploadFile.getAbsoluteFile().toString());
httpConn.setRequestProperty("extra-id2", uploadFile.getParent());
httpConn.setRequestProperty("extra-id3", uploadFile.length() + "");
OutputStream outputStream = httpConn.getOutputStream(); //<< this is the source of the error
FileInputStream inputStream = new FileInputStream(uploadFile);
byte[] buffer = new byte[BUFFER_SIZE];
int bytesRead = -1;
System.out.println("Start writing data...");
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
System.out.println("Data was written.");
outputStream.close();
inputStream.close();
// always check HTTP response code from server
int responseCode = httpConn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
// reads server's response
BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
String response = reader.readLine();
System.out.println("Server's response: " + response);
} else {
System.out.println("Server returned non-OK code: " + responseCode);
}
} catch (Exception e) {
e.printStackTrace();
sendStuff();
}
}
}).start();
}
此函数在正常的JAVA中可以正常使用,但是当复制到Android时,它会抛出java.net.SocketTimeoutException:连接超时,我不知道为什么.
解决方法:
有两种可能性,
1)您是否检查并测试了连接.
2)最好不要设置任何连接超时,如果您设置了选择的最大时间,则bcos会引发错误,如果服务器在给定时间内没有响应.
内容总结
以上是互联网集市为您收集整理的Android java.net.SocketTimeoutException:连接超时全部内容,希望文章能够帮你解决Android java.net.SocketTimeoutException:连接超时所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。