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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> j2me socket обрыв соединения, Обрывы соединения на большом объеме 
:(
    Опции темы
gregson
Дата 17.11.2009, 04:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

   public void run() {
        try {
            sc = (SocketConnection) Connector.open("socket://" + FHost + ":" + FPort);
            sc.setSocketOption(sc.KEEPALIVE, 1);
            sc.setSocketOption(sc.RCVBUF, 16384);
        } catch (Exception e) { /*e.printStackTrace();*/ Stop(); return; }
        if (sc == null) return;
        try {
            is = sc.openInputStream();
            os = sc.openOutputStream();
        } catch (Exception e) { e.printStackTrace(); }
        try {
            FSender = new TCPSender(os);
            FSender.Wait();
        } catch (Exception e) { e.printStackTrace(); }
        FActive = true;
        int i = 0, k = 0;
        try {

            // added  
            tmrPing.enable(); // ping ON 
            ping = 0;
            // comment for disable pings

            while (FActive) {
                i = 0; k = 0;
                for (int a = 0; a < 4; a++) {
                    i = is.read();
                    if (i==-1) throw new DisconnectException();
                    k = k + ( i << ( 8 * (3 - a) ) );
                }
                if (( k < 1)|(k>16384)) throw new DisconnectException();
                byte[] x = new byte[k];
                is.read(x);

                // added
                if ((x.length == 1) && (x[0] == '!')) { // pong answer - "!"
                    ping--;
                    x = null;
                    continue;
                }

                Incoming = wuc.WinToUnicode(x);
                buffer.addElement(Incoming);
                MainMidlet.GetDisplay().flashBacklight(0);

                x = null;

                try { Thread.sleep(250); } catch (Exception e) {}
            }
        }
        catch (InterruptedIOException iioe) { Stop(); }
        catch (DisconnectException de) { Stop(); }
        catch(Exception e) { Stop(); e.printStackTrace(); }
    }


Проблема при попытке сервера отослать длинную строку, на разных моделях телефонов по разному: на одних соединение рвется при длине строки больше 1.5кб, на других и того меньше, на третьих вообще не рвется. Проблема проявляется только при использовании GPRS интернета, т.е. когда запускаю приложение через wifi соединение все отлично работает с любыми объемами.

Внимание вопрос (гонг!): В чем может быть причина разрыва соединение при получении телефоном длинной строки!?

            sc = (SocketConnection) Connector.open("socket://" + FHost + ":" + FPort);
            sc.setSocketOption(sc.KEEPALIVE, 1);
            sc.setSocketOption(sc.RCVBUF, 16384);

sc делал раньше streamconnection, сейчас поменял на socket чтобы установить размер буфера чтения, не помогло :/
также пробовали комментить строку
  try { Thread.sleep(250); } catch (Exception e) {}
на случай если данные идут подряд двумя пакетами это могло вызывать exception

исходим из того что сервер посылающий длинную строку отдает ее пакетизацию (!) протоколу TCP, но вообще-то пробовали и сервером разбивать строку на две и отсылать подряд чтобы длина отсылаемой строки не превышала 800 байт, результата особо небыло.

Протокол обмена подразумевает что сначала идет 4х байтовая длина строки, потом сама строка.
Телефон получает строку и успевает обработать ее и вывести на экран на долю секунды, потом происходит разрыв соединения с сервером.

Кстате eclipse ругается на sc.KEEPALIVE и sc.RCVBUF типа некорректно я их использую

Если нужны еще куски кода спрашивайте!

Это сообщение отредактировал(а) gregson - 17.11.2009, 05:02
PM MAIL   Вверх
gregson
Дата 18.11.2009, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я что-то не то спросил? вопрос слишком ламерский? подскажите хоть где начать копать, в чем может быть отличие передачи данных через gprs, кроме скорости передачи!?
PM MAIL   Вверх
math64
Дата 18.11.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Возможно, при использовании wap сообщение режется на мелкие кусочки, а при gprs нет. (но это только моё предположение)
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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