Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поддержка HTTP/1.1, похоже у меня телефон не поддерживает 
:(
    Опции темы
javastic
Дата 11.1.2006, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 19
Всего: 27



Всем привет.

Столкнулся с непонятной ошибкой, а именно приложение отсылает через метод POST данные
на php скрипт. Когда использую в эмуляторе HTTP версии 1.0 всё работает: как Запрос, так и Ответ. Но приходят данные от сервака как HTTP 1.1, всё бы было хорошо, но на телефоне приложение не может принять ответ, я так предпологаю как раз из-за того что сервер пресылает ответ в версии HTTP 1.1. Если на эмуляторе использовать HTTP 1.1 то и Запрос и Ответ не работают, сетевой монитор показывает что данные передаются без остановки.

Проверьте кто-нибудь так ли у вас?
версия WTK 2.2

телефон sony ericsson k300


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
erka
Дата 11.1.2006, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 13.7.2005

Репутация: 1
Всего: 1



проверь какой код ответа приходит от сервака, когда запускаешь мидлет на телефоне. Случайно не 100?
PM MAIL   Вверх
javastic
Дата 11.1.2006, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 19
Всего: 27



100 приходил когда был включен HTTP/1.1 данные как будто подвисали при передаче.
Тело состояло из chuncked блоков. Я включил в эмуляторе HTTP/1.0 после этого стало передаваться одним блоком. И эмулятор обратно получает код ошибки 200 ОК, а вот телефон на вызове (после отсылки байтов)
Код

dis = new DataInputStream(hc.openInputStream()); 
ничего не хочет принимать и виснет на этой строке. Это я смотрел отладкой подключив телефон через шнурок как On Device Debug.

Это сообщение отредактировал(а) javastic - 11.1.2006, 12:58


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
erka
Дата 12.1.2006, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 13.7.2005

Репутация: 1
Всего: 1



а можешь больше кода представить общественности?


Это сообщение отредактировал(а) erka - 12.1.2006, 12:21
PM MAIL   Вверх
redrick
Дата 13.1.2006, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 1
Всего: 5



работал с http 1.1 все было в норме
девайсы пробовал : Ericson K600, Z520


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
erka
Дата 13.1.2006, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 13.7.2005

Репутация: 1
Всего: 1



я тоже работал. k500, k700, k750i, Nokia6600


PM MAIL   Вверх
javastic
Дата 17.1.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 19
Всего: 27



Дело в том, что реальный телефон посылает всегда chunked пакеты, обратно сам сервак ничего не возвращает, происходит со временем timeout. Если пробовать через эмулятор и включить http монитор, то видно что сервак возвращает код ошибки CONTINUE 100

вот код:
Код

         hc = (HttpConnection)Connector.open(
                    "http://site/gets2.php", Connector.READ_WRITE);
            
            hc.setRequestMethod(HttpConnection.POST);
            hc.setRequestProperty("Accept", "*/*");
            hc.setRequestProperty("Accept-Language", "en");

            hc.setRequestProperty("Content-Type", "multipart/form-data; boundary=---------------------------7d6d81219125e"); 
            hc.setRequestProperty("Pragma", "no-cache"); 
            hc.setRequestProperty("Proxy-Connection", "Keep-Alive"); 
            hc.setRequestProperty("User-Agent","Profile/MIDP-2.0 Configuration/CLDC-1.1"); 
            
            
                        
            String pngString = new String(pict);
            String boundary = "---------------------------7d6d81219125e";
             
            String message = "--" + boundary + "\r\n" +
                    "Content-Disposition: form-data; name=\"bytes\"; filename=\"data.png\"\r\n" +
                    "Content-Type: image/x-png\r\n\r\n" + pngString + "\r\n" +
                    "--" + boundary + "--\r\n";
            
            byte[] messageBody = message.getBytes();
            
            hc.setRequestProperty("Content-Length", Integer.toString(messageBody.length));
            
            
            System.out.println("message length: " + messageBody.length);
            dos = hc.openDataOutputStream();

            dos.write(messageBody);
            //dos.flush();
            //dos.close();
            System.out.println("sended. ");
            StringBuffer response = new StringBuffer();
     
            // ВОТ ПОСЛЕ ЭТОЙ СТРОКИ ПРОИСХОДИТ TimeOut!
            System.out.println("resp: " + hc.getResponseCode());
            
                   
            dis = new DataInputStream(hc.openInputStream());
            int length = (int)hc.getLength();
            System.out.println("Response length: " + length);

            int ch;
            while ((ch = dis.read()) != -1) {
                response.append((char)ch);
            }
       
            
            Form f = new Form("Info");
            f.append(new String(response));
            display.setCurrent(f);



Но если на эмуляторе поставить HTTP/1.0 то всё работает на УРА!
Устанавливаешь софтину на реальный телефон, всё равно "висит" видимо потому что использует HTTP/1.1

Я перерыл кучу форумов, есть точно такие же проблемы, но люди так и не могут дать вразумительный ответ как это пофиксить.

Да, и ещё. Размер пакета составляет 2016 байт, если этот размер данные не превышают, то всё отрабатывает корректно, отсылаются данные на сервер, сохраняются в файл и сервер обратно возвращает код ошибки OK 200.



Это сообщение отредактировал(а) javastic - 17.1.2006, 09:51


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Dancer
Дата 17.1.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



А если воспользоваться SocketConnection и посмотреть в сторону java.io.ByteArrayInputStream (можно получить данные в телефон в виде byte[] а после из этого массива получаем InputStream)



--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
javastic
Дата 17.1.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 19
Всего: 27



Dancer, ты имеешь ввиду на весь POST запрос или только на ответ от сервера?


--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
Dancer
Дата 17.1.2006, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



на весь


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
javastic
Дата 17.1.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1214
Регистрация: 18.3.2005
Где: St.Petersburg

Репутация: 19
Всего: 27



А как тогда в таком случае будет вызываться крипт?
Код

SocketConnection sc = (SocketConnection)Connector.open("socket://site:80/app/gets2.php");


Так что-ли? я использовал сокеты, но никогда в таком виде.
Может у тебя есть какой-нибудь пример?



--------------------
01101010 01100001 01110110 01100001 01110011 01110100 01101001 01100011
scjp, mcp 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.