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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> телефон зависает на Connector.open("socket:// 
:(
    Опции темы
Starjedy
Дата 21.10.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подключаюсь с телефона к серверу через сокет. На многих телефонах работает нормально, на эмуляторе S60 тоже работает, но на Nokia 7610 и ещё некоторых подобной серии при вызове 
Код
socket = (SocketConnection)Connector.open("socket://" +ip + ":" + port);
 телефон зависает, помогает только изъятие аккмулятора.

Класс производящий подключение к серверу: 
Код
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.SocketConnection;
import javax.microedition.io.StreamConnection;
import javax.microedition.lcdui.Display;

public class Net_connect implements Runnable{

    private Thread commThread;
    public static Net_connect instance;
    public SocketConnection socket;
    public InputStream in;
    public OutputStream out;
    public Reader r;
    public Writer w;
    public boolean connect;
    public int connect_count=0;
    public long byteload=0;

    public Net_connect(){
        instance=this;
    }

    public void disconnect(){
        try{
            connect=false;
            in.close();
            out.close();
            socket.close();
            socket=null;
            in=null;
            out=null;
        } catch (Exception e){
            e.printStackTrace();
        }
    }

    public void run(){
        connect();
    }

    public void conn_run(){
        startThread();
    }

    private void startThread(){
        commThread = new Thread(this);
        commThread.start();
    }

    public void connect(){
        String ip="86.55.192.91";
        int port=5550;
        try{
            connect_count++;
           // System.out.println("connect ...");
            socket = (SocketConnection)Connector.open("socket://" +ip + ":" + port);
            in=socket.openInputStream();
            out=socket.openOutputStream();
            r=new Reader(this);
            w=new Writer(this);
            r.reader_run();
            w.writer_run();
        } catch (IOException e) {
            if (connect_count<3){
                System.out.println("can not connect - reconect");
                connect=false;
                connect();
            }else{
                System.out.println("no connect :(");
                connect_count=0;
                MyAlert da=new MyAlert("Неудаётся подключиться к серверу");
                Display.getDisplay(MobileCatalog.inst).setCurrent(da);
            }
        }
    }

    synchronized void notify_this() {
        this.notify();
    }

    public void load_net(String s,String stop_word){
        if (connect){
            r.stop_word=stop_word;
            send_mess(s);
        }else{
            connect();
        }
    }

    public void send_mess(String mess){
        System.out.println("send "+mess);
        if (!connect) connect();
        w.send=mess;
        w.notify_this();
    }

    public String get_loadkb(){
        return Long.toString(byteload/1024);
    }
}


вызывается подключение при запуске мидлета: 
Код
    public void startApp() {
        sc.setFullScreenMode(true);
        Display.getDisplay(this).setCurrent(sc);
        (new Net_connect()).conn_run();
    }


телефон выдаёт запрос на подключение, нажимаю "да", он зависает. Выбор способа доступа не выдаёт.
в чём проблема ?! заранее благодарен
PM MAIL   Вверх
ivanovpv
Дата 22.10.2009, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


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

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



Цитата(Starjedy @  21.10.2009,  19:09 Найти цитируемый пост)
 телефон зависает, помогает только изъятие аккмулятора.


На продакшне надо изымать строчки "а ля"
Код

 System.out.println("send "+mess);


На некоторых телефонах из-за отсутствия перенаправления стандартных потоков могут возникать неприятные ситуации. Возможно в вашем случае связано с этим.


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
Starjedy
Дата 22.10.2009, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



удалил все System.out.println, непомогло, виснет
PM MAIL   Вверх
eugine_s
Дата 22.10.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сложно сказать - кажется все правильно. 

Попробуй своему потоку выставить более высокий приоритет (Thread.setPriority(Thread.MAX_PRIORITY)) - сомневаюсь, что поможет, но у мне как-то помогло (хотя в той программе у меня было 2 потока...)
PM MAIL   Вверх
Starjedy
Дата 22.10.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



мне кажется что приоритеты потоков для работы с сетью наоборот должны быть низкими чтобы не задерживать обработку событий клавишь и отрисовку экрана, попробовал, чтото не помогло
PM MAIL   Вверх
W0LF
Дата 23.10.2009, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

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



а попробуйте стандартный пример сокетов из WTK


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
ivanovpv
Дата 23.10.2009, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


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

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



А не пробовали другой IP адрес/сервер - может сервер чего-то такое говорит, от которого клиент дохнет?

И еще как вариант половите в блоке: try-catch не Exception, а Throwable - может выдается Runtime, который вы не ловите.

Это сообщение отредактировал(а) ivanovpv - 23.10.2009, 08:02


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
Starjedy
Дата 28.10.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



сервер проверенный и выдаёт всё корректно, к нему даже подключения не происходит, виснет именно на строчке socket = (SocketConnection)Connector.open("socket://" +ip + ":" + port);
Throwable тоже ничего не ловит. 

Это сообщение отредактировал(а) Starjedy - 28.10.2009, 21:00
PM MAIL   Вверх
ivanovpv
  Дата 28.10.2009, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


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

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



Ну значит Nokia 7610 фтопку, тем более что он позиционируется как телефон для блондинок  smile 

Если кроме шуток, может попробовать Thread.sleep(1000) перед открытием сокета? Может кому-то что-то надо в основном потоке...

Уже какое-то шаманство пошло  smile 


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
Starjedy
Дата 1.11.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Проблема решена,  Canvas отрисовывался на весь экран телефона, а при соединени к серверу выдаётся запрос выбора точки доступа к интернету, так Canvas закрывает это сообщение и перехватывает события.
PM MAIL   Вверх
ivanovpv
Дата 2.11.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


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

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



Цитата(ivanovpv @  28.10.2009,  21:28 Найти цитируемый пост)
Может кому-то что-то надо в основном потоке...


Я же говорил...



--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
Arahnus
Дата 30.11.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тоже приложение западает но по другому.

На сервер постом отправляется текст и после отправки даже не доходит до чтения
западает на getResponseCode();
Соединение медленное 1КБ/с
Если отправить короткий текст то все нормально, но если отправить 13kb текста то западает на getResponseCode();

У себя на локальном хосте пробовал и все нормально.

Добавлено через 4 минуты и 4 секунды
Кстати использую пример из WTK23

Код получился такой

Код

   void postViaHttpConnection(String url,String pr,String namef) throws IOException {
        HttpConnection c = null;
        InputStream is = null;
        OutputStream os = null;
        int rc;
System.out.println("postViaHttpConnection");
        try {
            c = (HttpConnection)Connector.open(url.trim());

            // Set the request method and headers
            if(pr.length()>0)c.setRequestMethod(HttpConnection.POST);
            //c.setRequestProperty("If-Modified-Since", "29 Oct 1999 19:43:31 GMT");
            c.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.8 (build 01709); .NET CLR 1.1.4322)");
            c.setRequestProperty("Content-Language", "en-US");
            if(pr.length()==0)c.setRequestProperty("Content-Type", "text/plain"); 
            else c.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
            // Getting the output stream may flush the headers
            os = c.openOutputStream();
            if(pr.length()>0){
                logproc="Отправка";
                //System.out.println(pr);
                os.write(pr.getBytes());
                logtraf+=pr.length();
                os.flush(); // Optional, getResponseCode will flush
            }
                     

            // Getting the response code will open the connection,
            // send the request, and read the HTTP response headers.
            // The headers are stored until requested.
            rc = c.getResponseCode();
            System.out.println("dalee read");
            if (rc != HttpConnection.HTTP_OK) {
                throw new IOException("HTTP response code: " + rc);
            }

            is = c.openInputStream();

            // Get the ContentType
            String type = c.getType();
            processType(type);

            // Get the length and process the data
            int len = (int)c.getLength();
            logproc="Загрузка";
            
            if (len > 0) {
                 int actual = 0;
                 int bytesread = 0 ;
                 byte[] data = new byte[len];
                 while ((bytesread != len) && (actual != -1)) {
                    actual = is.read(data, bytesread, len - bytesread);
                    bytesread += actual;

                 }
                 //buf.append(data);logtraf+=data.length;
                process(data);
            } else {
                int ch;
                while ((ch = is.read()) != -1) {

                    process((char)ch);

                }
                
            }
            
            ok_get=true;
        } catch (ClassCastException e) {//System.out.println("err conector");
            throw new IllegalArgumentException("Not an HTTP URL");
        } finally {
            if (is != null)
                is.close();
            if (os != null)
                os.close();
            if (c != null)
                c.close();
        }
    }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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