Получение исключения тайм-аута сокета в Windows, но не в Linux - PullRequest
0 голосов
/ 13 мая 2011

Я тупица здесь! Я написал приложение для Android, которое загружает изображение с устройства в сервлет. Приложение работает безупречно на эмуляторе как на Windows 7, так и на Linux. Однако, когда я запускаю приложение на своем реальном устройстве, а сервлет на моем компьютере с Windows, я получаю исключение SocketTimeoutException! Но если сервлет работает на компьютере с Linux, он работает отлично! Любые идеи, что я должен настроить Windows, чтобы заставить это работать ?! Я даже изменил свои серверы приложений с Glassfish на Tomcat и все те же результаты! Любые советы будут оценены .. Спасибо

Вот часть сервлета, которая читает изображение из клиента Android. Я использовал apache fileupload на стороне клиента

         try {
  List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
    for (FileItem item : items) {
     if (item.getFieldName().equals("imgFile")) {
        String fileName = item.getName();
        InputStream fileContent = item.getInputStream();
        int d;
        FileOutputStream fout = new FileOutputStream(new File( DIR + "savedImage.jpg"));
        while((d = fileContent.read()) != -1)
        {
         fout.write(d);
        }
        fout.close();
    }
}
} catch (FileUploadException e) {
 throw new ServletException("Cannot parse multipart request.", e);
}

С сервлетом, развернутым на моем компьютере с Windows, я получаю исключение при новый ServletFileUpload (новый DiskFileItemFactory ()). ParseRequest (запрос); линия.

Вот сегмент кода клиента Android, который отправляет файл сервлету

             File f = new File("/mnt/sdcard/img/imgToUpload.jpg");
             HttpClient client = new DefaultHttpClient();

             HttpPost post = new HttpPost("http://192.168.2.2:8084/WebApplication5/imgServlet");

             MultipartEntity entity = new MultipartEntity();
             FileBody fb = new FileBody(f);
             entity.addPart("imgFile", fb);
             post.setEntity(entity);
             try {
                 HttpResponse servletResponse = client.execute(post);
                 HttpEntity respentity = servletResponse.getEntity();

             } catch (IOException ex) {
                 Logger.getLogger(FTXWActivity.class.getName()).log(Level.SEVERE, null, ex);
             }

1 Ответ

1 голос
/ 14 мая 2011

Наиболее вероятные объяснения:

  1. что ваше устройство и ваш Windows-бокс не находятся в одной подсети (или даже в одной сети).Вы уверены, что ваше устройство подключено к вашему Wi-Fi?

  2. У вашего окна есть порт блокировки межсетевого экрана 8084. Если бы вы запускали эмулятор с вашего окна Windows, он все равно работал бы.

Вы можете попробовать посмотреть на вывод команды netstat -ab в окне windows и убедиться, что он прослушивает нужный порт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...