发送第二条消息时 HttpUrlConnection 连接重置错误
HttpUrlConnection connection reset error when sending second message
基本上就是这样,发送的第一条消息被服务器正确接收,但是接下来的都失败了。这是迭代消息并处理一些用于调试和代码逻辑的错误的主循环。变量 udc 是我的数据库连接,但它工作正常所以忽略它。
for (MessageOutModel message : messageOutModels) {
HttpURLConnection connection = MakeConnection();
Date currentMoment = new Date(Calendar.getInstance().getTimeInMillis());
System.out.println("Sent message id: " + message.id);
OutputStreamWriter out = new OutputStreamWriter(
connection.getOutputStream());
out.write(message.contenido);
out.close();
//os.write(message.contenido);
System.out.println("Message sent");
int responseCode = connection.getResponseCode();
System.out.println("Connection message: " + responseCode);
message.f_ultimo_intento = currentMoment;
if (responseCode != 200) {
message.intentos++;
message.desc_error = "Connection error: " + responseCode
+ " Connection error message: " + connection.getResponseMessage() + "Response error:" +
connection.getResponseMessage();
udc.UpdateMessageOut(message);
if (message.intentos == configModel.n_reintentos) {
udc.InsertError("MAX_INTENTOS", "Se ha alcanzado el máximo número de " + "intentos para el id-ticket: " + message.id + "-" + message.ticket_number);
}
} else {
message.desc_error = "";
udc.UpdateMessageOut(message);
}
connection.disconnect();
}
方法 MakeConnection()
protected HttpURLConnection MakeConnection() throws IOException {
QName q = new QName(SERVER_URL, "");
URL url = new URL(q.getNamespaceURI() + q.getLocalPart());
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestProperty("UserName", Username);
connection.setRequestProperty("PassWord", Password);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", MediaType.TEXT_PLAIN);
return connection;
}
Connection reset error
将其用作快速解决方案。
HttpURLConnection connection = MakeConnection();
for (MessageOutModel message : messageOutModels) {
// logic from your sample
}
connection.disconnect();
此外,您可以使用 try-with-resources 稍微改进一下设计。
最后发现是客户端和服务器的防火墙问题。它在第一次之后每隔一段时间就阻塞连接。
基本上就是这样,发送的第一条消息被服务器正确接收,但是接下来的都失败了。这是迭代消息并处理一些用于调试和代码逻辑的错误的主循环。变量 udc 是我的数据库连接,但它工作正常所以忽略它。
for (MessageOutModel message : messageOutModels) {
HttpURLConnection connection = MakeConnection();
Date currentMoment = new Date(Calendar.getInstance().getTimeInMillis());
System.out.println("Sent message id: " + message.id);
OutputStreamWriter out = new OutputStreamWriter(
connection.getOutputStream());
out.write(message.contenido);
out.close();
//os.write(message.contenido);
System.out.println("Message sent");
int responseCode = connection.getResponseCode();
System.out.println("Connection message: " + responseCode);
message.f_ultimo_intento = currentMoment;
if (responseCode != 200) {
message.intentos++;
message.desc_error = "Connection error: " + responseCode
+ " Connection error message: " + connection.getResponseMessage() + "Response error:" +
connection.getResponseMessage();
udc.UpdateMessageOut(message);
if (message.intentos == configModel.n_reintentos) {
udc.InsertError("MAX_INTENTOS", "Se ha alcanzado el máximo número de " + "intentos para el id-ticket: " + message.id + "-" + message.ticket_number);
}
} else {
message.desc_error = "";
udc.UpdateMessageOut(message);
}
connection.disconnect();
}
方法 MakeConnection()
protected HttpURLConnection MakeConnection() throws IOException {
QName q = new QName(SERVER_URL, "");
URL url = new URL(q.getNamespaceURI() + q.getLocalPart());
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestProperty("UserName", Username);
connection.setRequestProperty("PassWord", Password);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", MediaType.TEXT_PLAIN);
return connection;
}
Connection reset error
将其用作快速解决方案。
HttpURLConnection connection = MakeConnection();
for (MessageOutModel message : messageOutModels) {
// logic from your sample
}
connection.disconnect();
此外,您可以使用 try-with-resources 稍微改进一下设计。
最后发现是客户端和服务器的防火墙问题。它在第一次之后每隔一段时间就阻塞连接。