Я разработал приложение для Android, которое использует PHP веб-API для хранения и извлечения данных с сервера MySQL, который размещен в общедоступной учетной записи общего хостинга. У меня фиксированная база пользователей около 550 человек, которые должны входить в мое приложение и вводить данные. На этапе тестирования я никогда не сталкивался с какими-либо проблемами с подключением. Но когда он запущен с полной пользовательской базой, он случайно показывает ошибку «W / System.err: java.io.IOException: неожиданное завершение потока при соединении». Много искал в сети и в итоге получил ответы, которые мне не помогли. Я был бы очень признателен, если бы кто-нибудь имел представление о том, что происходит не так.
Сначала я использовал AsyncTask & HttpURLConnection для подключения к веб-серверу. Затем заменили залп частично. Но по-прежнему возникают те же проблемы, особенно когда большинство пользователей пытаются получить доступ одновременно. Ниже приведен мой обработчик веб-запросов.
public class RequestHandler {
public String sendPostRequest(String requestURL, HashMap<String, String> postDataParams){
URL url;
StringBuilder sb;
String sbString;
try{
url = new URL(requestURL);
//Creating a http url connection
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//Configuring connection properties
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
//Creating an output stream
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
writer.write(getPostDataString(postDataParams));
writer.flush();
writer.close();
os.close();
int responseCode = conn.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK){
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
sb = new StringBuilder();
String response;
while((response = reader.readLine()) != null){
sb.append(response);
}
sbString = sb.toString();
Log.d("RequestHandler", "***** sendPostRequest() >> HTTP_OK >> "+sbString);
}
else{
sbString = "{\"error\": true,\"message\":\"URL Connection Error\"}";
}
}
catch (SocketTimeoutException conTimeoutEx) {
sbString = "{\"error\": true,\"message\":\"Timeout caused by poor Internet connectivity.\"}";
}
catch(Exception e){
sbString = "{\"error\": true,\"message\":\"technical error: "+e.getMessage()+"\"}";
e.printStackTrace();
}
//return sb.toString();
return sbString;
}
}
Я получаю исключение во втором блоке catch. Такое же исключение возникает при использовании залпа.