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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataInputStream, trouble 
V
    Опции темы
VKoresh
Дата 4.7.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 14.6.2007
Где: Запорожье

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



Тогда надо как-то отсылать параллельно с бесконечным циклом?

ЗЫ Пойду еще покурю мануалы  smile 

Это сообщение отредактировал(а) VKoresh - 4.7.2007, 16:48
PM MAIL ICQ   Вверх
W0LF
Дата 4.7.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


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

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



Цитата

Тогда надо как-то отсылать параллельно с бесконечным циклом?

Да, класс Sender юзает отдельный поток и он же - потокобезопасен(синхронизирован)


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 14.6.2007
Где: Запорожье

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



Что-то меня вообще не в ту степь понесло... Получается, что вообще необязательно создавать отдельный класс и поток. Ведь есть InputStream. Проще дописать в CommandAction еще комманду которая будет пересылать что-нибудь. Сейчас сяду пробовать.

Это сообщение отредактировал(а) VKoresh - 4.7.2007, 18:19
PM MAIL ICQ   Вверх
W0LF
Дата 5.7.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


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

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



тебе нужно почитать про многопоточность


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 14.6.2007
Где: Запорожье

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



Сейчас докатился до вот такого:
Код


public void run()
    {
        
        int c = 0;
        String S;
        int av = 0;

        try
        {
            sc = (SocketConnection)Connector.open("socket://" + (TFIP.getString()) + ":" + (TFPort.getString()));
            os = sc.openDataOutputStream();
            is = sc.openDataInputStream();
            

            //os.write и т.д.

            while (true)
            {
                av = is.available();
                if (av > 0)
                {
                    if (sb.length() > 0)
                    {
                        sb.delete(0, sb.length() - 1);
                    }

                    while (av > 0)
                    {
                        c = is.read();
                        av = is.available();
                        System.out.println("av " + av);
                        sb.append((char)c);
                        System.out.println("receiving" + sb.toString());
                    }                

                    System.out.println("Message received - " + sb.toString());
                    // дальше должна быть обработка полученной строки
                }
            }
        }
        catch (IOException x)                                        
        {
            x.printStackTrace();
        }        
     }




Принимает, однако параллельно с этим ничего не может сделать, т.е. не реагирует до тех пор пока все не получит.
Также такой прикол - available возвращает число не больше 25! И еще вопрос можно сделать чтоб он не побайтно считывал а все сразу?
Пробовал read(byte[] b), то ли не понял, то ли.. smile 

ЗЫ W0LF, не кинешь ссылку на какую-то инфу про многопоточность? Великий и Ужасный Гугл меня не понял... :(


Это сообщение отредактировал(а) VKoresh - 5.7.2007, 13:20
PM MAIL ICQ   Вверх
W0LF
Дата 5.7.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


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

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



Создание многопоточных приложений в Java

Добавлено через 1 минуту и 8 секунд
А вообще : один топик - один вопрос.


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 14.6.2007
Где: Запорожье

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



W0LF, спасибо! с помощью wait и notify реализовал! Такой довольный, хоть джигу пляши smile  
PM MAIL ICQ   Вверх
W0LF
Дата 11.7.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


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

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



На здоровье smile


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


Новичок



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

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



Здравствуйте! Решила не создавать новую тему, а задать вопрос в этой, так как десь обсуждается networkDemo. Сервер написан на дельфи, а клиента запускаю на эмуляторе, программу networkDemo. Код java не правила. Дело в том, что сервер от клиента принимает сообщения нормально, а вот клиент от сервера не принимает. Вернее, может и принимает, но в статусе не выводит, что сообщение получено. Можно было предположить, что с сервером что-то не так, но когда он посылает сообщения, то в окне эмулятора горит индикатор связи, значит, связь все таки есть. А сообщение так и не выводит (или не получает). В чем тут проблема?
PM MAIL ICQ   Вверх
W0LF
Дата 4.2.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


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

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



Проблема где-то в коде скорее всего
В смысле его надо показать

Это сообщение отредактировал(а) W0LF - 4.2.2010, 13:57


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


Новичок



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

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



Получение сообщения происходит здесь:
Код

        // Loop forever, receiving data
        while (true) {
        StringBuffer sb = new StringBuffer();
        int c = 0;
        while (((c = is.read()) != '\n') && (c != -1)) {
            sb.append((char) c);
        }
        if (c == -1) {
            break;
        }
        // Display message to user
        si.setText("Message received - " + sb.toString());
        }


Но в текстовом поле si полученное сообщение не отображается, а только строка, которая устанавливается при соединении с сервером:
Код

        si.setText("Connected to server on port "+portString);

Вернее, если сервер запускать также через WTK, то все работает нормально. Но нужно, чтобы j2me клиент работал с сервером, написанным на Delphi, с которым имеет место эта проблема.
Код отправки сообщения сервером:
Код

procedure TForm1.BitBtn3Click(Sender: TObject);
     var i: Integer;
    begin
      for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do begin
       ServerSocket1.Socket.Connections[i].SendText(Edit1.Text);
       Application.ProcessMessages;
      end;
      Memo1.Lines.Insert(0,'< '+Edit1.Text);
    end;

Но проблема не в сервере, так как клиент на Delphi сообщения сервера принимает нормально

Это сообщение отредактировал(а) Yelodia - 9.2.2010, 12:59
PM MAIL ICQ   Вверх
Dancer
Дата 9.2.2010, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



На форме есть элементы, и если нужно обновить (перерисовать) форму (элементы на форме), после изменения значения этих элементов, то:
  - либо создаём собственную форму и имплементим ItemStateListener
  - либо какой-либо класс имплементит ItemStateListener, а форма должна будет зарегить листенер:
     class MyClass implements ItemStateListener {
......
         Form myForm = new Form();
         myForm.setItemStateListener(this);
         StringItem si = new StringItem("MSG:","unknown...");
         myForm.append(si);
......
         si.setText("Bla-bla-bla");
.......
         public void itemStateChanged(Item item) {
             if(item == si) {
                 Display.setCurrent(myForm); // Display.getDisplay(MIDlet).setCurren(Item);
            }
     }



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


Новичок



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

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



Попробовала, не работает. Дело не в изменении объекта Item, так как изначально (то есть с сервером на j2me) работало и без этого обработчика. Изменила код так, что при получении сообщения выводилось уведомление Alert:
Код

        while (true) {
        StringBuffer sb = new StringBuffer();
        int c = 0;
        while (((c = is.read()) != '\n') && (c != -1)) {
            sb.append((char) c);
        }
        if (c == -1) {
            break;
        }

        // Display message to user
           Alert a = new Alert("Client",
            "Message received " + port,
            null, AlertType.INFO);
        a.setTimeout(Alert.FOREVER);
        a.setCommandListener(this);
        display.setCurrent(a);
        }

Нет никакой реакции, получается, что клиент от сервера вообще не принимает сообщения...
PM MAIL ICQ   Вверх
Dancer
Дата 9.2.2010, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

ну, хорошо, а вы можете сервак на делфи снабдить трейсами и посмотреть логи?
Чтобы быть реально уверенным, что данные с него действительно были отправленны.
Так как is.read() - это блокирующая операция, и разблокируется она лишь в том случае, как что-то от сервака действительно в этом потоке появиться, ну или будет уничтожен коннекшен со стороны сервера.
Так же есть NetworkMonitor когда запускаете приложение в WTK его можно использовать для дебага и смотреть, как пакеты ходят через сетку.



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


Новичок



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

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



Запустила NetworkMonitor, там отправленная сервером строка отображается нормально, думаю, остальное нет смысла делать. 
user posted image
А вот клиент по прежнему не реагирует на событие...


Это сообщение отредактировал(а) Yelodia - 9.2.2010, 20:54
PM MAIL ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса

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

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


 




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


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

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