Проблемы с открытием http-соединения из blackberry simulator

#blackberry #java-me #blackberry-simulator #httpconnection

#ежевика #java-me #blackberry-simulator #httpconnection

Вопрос:

У меня возникли проблемы при открытии простого HttpConnection из симулятора, я добавил суффикс deviceside = true к своему URL, однако он все еще не работает, я получаю пустое httpconnection с кодом ответа 0. Это код, который вызывает у меня проблемы:

 public void readUrl(){
     HttpConnection conn=null;
        try {
            conn = (HttpConnection) Connector.open("http://www.google.com;deviceside=true");
            conn.setRequestMethod("GET");
             if(conn.getResponseCode()==HttpConnection.HTTP_OK){
                 System.out.println("Create connection sucessfully");
             }

        } catch (ConnectionNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        }




        DataInputStream din=null;
        ByteVector responseBytes=null;
        try {
            din = conn.openDataInputStream();
             responseBytes = new ByteVector();
              int i = din.read();
              while (-1 != i) {
                responseBytes.addElement((byte) i);
                i = din.read();
              }
        } catch (IOException e) {
            //TODO: HANDLE EXCEPTIONS
            e.printStackTrace();
        }
        responseBytes.toArray();
  

Я понятия не имею, что происходит. Предполагалось, что при добавлении deviceside = true он должен подключаться напрямую. В любом случае, я тоже попытался установить сервер MDS и установить для своего URL значение deviceside = false, но результат был тот же.

Теперь я протестировал тот же код, используя локальный URL, такойhttp://localhost:8080/resources/mypage.html , и это сработало, как ожидалось, поэтому мне было интересно, может ли это быть проблемой конфигурации симулятора. Как я могу это решить?

Большое спасибо.

Ответ №1:

По моему опыту, вам необходимо добавить ;deviceside= true при использовании симулятора MDS. Есть отличный пост о blackberry.com форумы, на которых показано, как определить, какой суффикс подключения следует использовать, а также несколько общих полезных советов по использованию подключений в BlackBerry.

Чтобы упростить получение содержимого вашего запроса, вы можете использовать класс IOUtilities:

 InputStream stream = conn.openInputStream();
String contents = new String(IOUtilities.streamToBytes(stream));
  

Ответ №2:

«;deviceside=true» предназначен для ПРЯМОЙ передачи TCP. Чтобы использовать MDS transport, вам нужно добавить «;deviceside=false».

При запуске на симуляторе устройства вы можете использовать ПРЯМОЙ транспорт TCP без необходимости запуска симулятора MDS. Однако, если вы хотите протестировать MDS transport, вам необходимо запустить MDS simulator перед запуском симулятора устройства.

Ответ №3:

На вкладках настройки симулятора «Общие» установлен ли флажок «Запустить MDS-CS с помощью симулятора»? Если это так, вам вообще не нужно добавлять какой-либо суффикс…

Ответ №4:

Да, вы правы, с deviceside = true использовалось подключение к Интернету, однако, похоже, это была проблема с классом HttpConnection, когда я использовал этот код вместо:

 public StreamConnection openConnection(){
    StreamConnection conn=null;
    try {
        conn = (StreamConnection) Connector.open(url ";deviceside=true");
        //conn.setRequestMethod(httpMethod);

    } catch (ConnectionNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    }

    return conn;


}
  

Это сработало правильно, поэтому мне было кое-что интересно…при открытии соединения в blackberry, куда я должен поместить свой код для проверки кода ответа. После создания соединения? как в приведенном выше коде или после открытия потока данных, подобного:

 din = conn.openDataInputStream();

         responseBytes = new ByteVector();
          int i = din.read();
          while (-1 != i) {
            responseBytes.addElement((byte) i);
            i = din.read();
          }
  

Спасибо.