我使用HttpURLConnection将大文件(高达160MB)上传到服务器。有一个奇怪的异常随机出现。这是代码。
我录制一个视频文件(最多5分钟)。然后上传它,我启动一个intentService。它使用HttpURLConnection。这是我如何启动HttpURLConnection。
try {
URL url=new URL(getString(postUrlResId));
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setConnectTimeout(60000);
//httpURLConnection.setUseCaches(false);
httpURLConnection.setFixedLengthStreamingMode(postLength);
httpURLConnection.setRequestMethod("POST");
//httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
//httpURLConnection.setRequestProperty("Cache-Control", "no-cache");
httpURLConnection.setRequestProperty("Content-Type", "multipart/form-data;boundary=*****");
dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream());
dataOutputStream.writeBytes(header);
-----------
----file writting to dataOutputStream
---------
}
dataOutputStream.writeBytes(footer);
RESPONSE_UPLOAD_VIDEO_BEING_PROCESSED_IN_SERVER();
if(httpURLConnection.getResponseCode() == 200 && httpURLConnection.getResponseMessage().equalsIgnoreCase("OK")) {
BufferedReader bufferReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));
StringBuffer serverRes = new StringBuffer();
String inputLine ;
while ((inputLine = bufferReader.readLine()) != null)
{
serverRes.append(inputLine);
}
PRINT_LOG(serverRes.toString());
RESPONSE_UPLOAD_COMPLETE(serverRes.toString());
}else {
RESPONSE_ERROR();
}
} catch (MalformedURLException e) {
e.printStackTrace();
PRINT_ERROR(" MalformedURLException. ");
RESPONSE_ERROR();
} catch (IOException e) {
e.printStackTrace();
PRINT_ERROR(" IOException. may be no internet connection ");
RESPONSE_ERROR();
} finally {
if (httpURLConnection != null) {
httpURLConnection.disconnect();
}
if (dataOutputStream != null) {
try {
dataOutputStream.flush();
dataOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
现在,这个调用“http pURLConnection.get输出流()”有时会抛出这个异常:
03-13 15:50:23.088:W/系统。err(27349):java。网SocketException:sendto失败:EconReset(对等方重置连接)03-13 15:50:23.088:W/系统。err(27349):在libcore。伊奥。伊奥布里奇。MaybethrowAfterEndto(IoBridge.java:506)03-13 15:50:23.088:W/System。err(27349):在libcore。伊奥。伊奥布里奇。sendto(IoBridge.java:475)03-13 15:50:23.088:W/System。err(27349):在爪哇。网普通袜子。write(PlainSocketImpl.java:507)03-13 15:50:23.088:W/System。err(27349):在爪哇。网普通袜子。访问$100(PlainSocketImpl.java:46)03-13 15:50:23.093:W/System。err(27349):在java。网PlainSocketImpl$PlainSocketOutputStream。write(PlainSocketImpl.java:269)03-13 15:50:23.093:W/System。err(27349):在爪哇。伊奥。输出流。write(OutputStream.java:82)03-13 15:50:23.093:W/System。err(27349):在libcore。网http。HttpEngine。writeRequestHeaders(HttpEngine.java:646)03-13 15:50:23.093:W/System。err(27349):在libcore。网http。HttpEngine。initRequestBodyOut(HttpEngine.java:346)03-13 15:50:23.093:W/System。err(27349):在libcore。网http。HttpEngine。sendSocketRequest(HttpEngine.java:301)03-13 15:50:23.093:W/System。err(27349):在libcore。网http。HttpEngine。sendRequest(HttpEngine.java:239)03-13 15:50:23.093:W/System。err(27349):在libcore。网http。HttpURLConnectionImpl。连接(HttpURLConnectionImpl.java:80)03-13 15:50:23.093:W/System。err(27349):在com。卡拉OK。服务上传服务。onHandleIntent(UploadService.java:145)03-13 15:50:23.093:W/System。呃(27349):在android上。应用程序。IntentService$ServiceHandler。handleMessage(IntentService.java:65)03-13 15:50:23.093:W/System。呃(27349):在android上。操作系统。汉德勒。dispatchMessage(Handler.java:99)03-13 15:50:23.093:W/System。呃(27349):在android上。操作系统。活套。loop(Looper.java:137)03-13 15:50:23.093:W/System。呃(27349):在android上。操作系统。手绢。运行(HandlerThread.java:60)03-13 15:50:23.098:W/System。错误(27349):由libcore引起。伊奥。ErrnoException:sendto失败:EconReset(对等方重置连接)03-13 15:50:23.098:W/系统。err(27349):在libcore。伊奥。Posix。发送字节(本机方法)03-13 15:50:23.098:W/系统。err(27349):在libcore。伊奥。Posix。sendto(Posix.java:146)03-13 15:50:23.098:W/System。err(27349):在libcore。伊奥。布洛克瓜多斯。sendto(BlockGuardOs.java:177)03-13 15:50:23.098:W/System。err(27349):在libcore。伊奥。伊奥布里奇。sendto(IoBridge.java:473)
大多数情况下,这通常发生在我第一次启动上传服务时。但这种情况是随机发生的。一旦抛出此异常,如果使用相同的参数再次启动服务,它就可以正常工作。文件越大,异常的发生率越高。我还注意到,这种问题在三星设备中出现的频率更高,我试过使用htc evo 3d,nexus 5也试过。似乎找不到任何理由来解释这样的问题。在网上找不到类似的问题。
更新:所以我不知道为什么会出现这个错误,但是当我把我的基本网址从域名网址切换到基于ip的网址时,它一直工作得很好。
httpURLConnection.disconnect();
httpURLConnection.connect();
我完全不知道你究竟为什么要调用这两种方法,但我建议删除这两行代码可以解决这个问题。
我尝试使用HttpUrlConnection使我的应用程序与我的php服务器通信。我写了一个在我的电脑上运行良好的类,但当我在手机上执行它时,它根本不起作用。 这是我的代码: DataOutputStream out=新的DataOutputStream(connection.getOutputStream());引发此异常: 我在电脑上测试了这段代码,它没有引发任何异常。我的清单: 谢谢
问题内容: 我想使用HttpURLConnection进行POST。我以两种方式尝试这种方法,但是这样做总是让我兴奋不已: 我在这两种情况下得到的异常是: java.net.SocketException:操作超时:connect:可能是由于无效的地址 功能1: 或功能2: 问题答案: 根本无法访问该URL。URL错误或DNS服务器无法解析主机名。尝试使用众所周知的URL进行简单连接以排除一个和另
我试图使用android HttpUrlConnection进行POST请求。首先,我从这里使用GET请求的示例: http://developer.android.com/training/basics/network-ops/connecting.html#http-客户 它工作得非常好(例如,我得到了google.com页面)。然后我做了一些更改以发出POST请求:更改POST上的请求方法:
你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception): '''A u
我在写一个apk分析程序。我不能深入细节,因为这是研究材料。然而,重点在于,当我执行分析例程时,不时会得到以下消息: 这只是主要代码。我必须执行三个主要操作。为了不泄露特定信息,我把它们重新命名为A、B、C 我将这个问题标记为multithread,因为在多线程版本中也会发生同样的情况,为了调试错误,我使用此代码对该版本进行了序列化。请注意,NullPointerException位于线程主线程中
问题内容: 鉴于此Java 8代码 我们如何正确地将其委派给方法调用的堆栈?(简而言之,如何使此方法抛出此错误?) Java中的Lambda看起来对错误处理不是很友好… 问题答案: 我的方法是从lambda 偷偷地 将其抛出,但是要小心,使该方法在其子句中声明它。使用我在这里发布的课程: 这样,您可以有效地使编译器仅“移开视线”,从而在代码中的某个位置禁用其异常检查,但是通过在方法中声明异常,可以