![]() |
Модераторы: javastic, AntonSaburov |
![]() ![]() ![]() |
|
VKoresh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
Сделал вот так:
Дело в том, что мне надо чтобы приложение не только отсылало строки но и принимало их. Отсылает на ура,а вот слушать порт и принимать не хочет. ![]() На строке listener = (SocketConnection)Connector.open("socket://:5555"); выдает java.io.IOException: ServerSocket Open Помогите, пожалйста! |
|||
|
||||
W0LF |
|
||||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
а ты посмотри в сторону
Добавлено через 3 минуты и 51 секунду Посмотри в WTK там пример есть очень простой.
-------------------- iOS developer |
||||
|
|||||
VKoresh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
Смотрел, не помогло, Горнакова и Пирумяна тоже читал, и тоже не помогло.
![]() ![]() ![]() Обидно, что даже компилится без ошибок... ![]() |
|||
|
||||
VKoresh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
![]() |
|||
|
||||
AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
А ты уверен, что этот порт свободен ? В смысле - 5555. Мож кто на нем висит постоянно ?
|
|||
|
||||
Dancer |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 29.4.2005 Где: Nizhniy Novgorod Репутация: 33 Всего: 37 |
дык он сам же на нём и висит скорее всего
![]() вот этот кусок кода очень не понятен!!!! (почему одно и то же название переменно фигурирует, перекрытие имён происходит) listener = (SocketConnection)Connector.open("socket://:5555"); DataInputStream listener = sc.openDataInputStream(); Добавлено через 8 минут и 29 секунд наверное должно быть так ![]()
-------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! ![]() |
|||
|
||||
VKoresh |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
Добавлено @ 17:09
AntonSaburov,
![]() Добавлено @ 17:19 Dancer, сделал
все как ты и говорил... Все та же проблемма - На строке listener = (SocketConnection)Connector.open("socket://:5555"); выдает java.io.IOException: ServerSocket Open Это сообщение отредактировал(а) VKoresh - 4.7.2007, 09:38 |
||||
|
|||||
Dancer |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 29.4.2005 Где: Nizhniy Novgorod Репутация: 33 Всего: 37 |
Ну давай всё с самого начала. (кстати на другом форуме это то же ты? Malkav кажется - или мне и туда и сюда отвечать нужно если вы два разных человека?)
1. Расскажи что ты хочешь сделать? 2. "Кто" такой сервер с которого ты что-то читаешь? 3. Есть ли возможность что-то посылать в определённый порт этого сервера и видеть, что он это принял и увидеть его реакцию? ===================================== Я не понимаю, для чего тебе на девайсе спецом заводить порт для прослушки, возможно ты просто немного не в ту сторону рубишься ![]() Если ты заводишь на "своём" телефоне порт, для того чтобы тебе кто-то на него что-то присылал (с друго телефона, с тырнета и т.д.) тебе нужно пользовать другой интерфейс для его создания. ServerSocketConnection ssc = (ServerSocketConnection)Connector.open("socket://:9677"); Это будет означать, что ты на своём телефоне слушаешь порт 9677, и всё что на него поступит, ты можешь обработать. Но для того чтобы в этот порт что-то пришло, нужно чтобы кто-то отправил тебе какие-либо данные. Это либо другой аппарат, либо с сайта (скриптом). Тебе нужно получить IP адрес твоего аппарата, и по этому адресу он будет доступен "клиентам" чтобы узнать IP адрес, который выдаётся динамически оператором, после регистрации сервака ssc коннекшена можно вызвать метод getLocalAddress() на объекте ssc. Для работы с ssc (чтение/запись) нам понадобится SocketConnection oбъект, мы его получаем через специальный метод: SocketConnection server = (SocketConnection) ssc.acceptAndOpen(); ну и далее уже по известной схеме, получаем стримы для чтения/записи InputStream serverIS = server.openInputStream(); OutputStream serverOS = server.openOutputStream(); Если же ты работаешь с каким-то серваком и тебе в него нужно что-то писать (делать какие-то посылки данных на сервер, не только чтение) то делаем это следующим образом, через интерфейс SocketConnection SocketConnection sc = (SocketConnection) Connector.open("socket://"+IP+":"+PORT); IP это обязательное поле!!!! InputStream is = sc.openInputStream(); // для чтения данных с сервера из коннекшена sc OutputStream os = sc.openOutputStream();// для отправки данных серверу из коннекшена sc -------------------- Маленькое отступление. Где ты это пытаешься "смотреть" (тестить). Могу предложить простенький вариант. Подними у себя на локальной машине простенький самописный сервер (можешь посмотреть как это делается в J2SE и работать с серваком на Java), ну или какой нить Apache или что-то в этом роде. Если не Java сервак, то тогда сделай скрипт perl/jsp/asp (или что-то другое, что лучше знаешь) и сиди и слушай этим скриптом порт, и делай какой-нить ответ "PONG", если тебе в этот порт сваливается "PING" и выводи это в лог или на браузерную страницу или ещё как. То есть, ты этим просто сможешь проверить, что у тебя твой Java клиент на мобиле робит. А клиента запускаешь через WTK регистрируя SocketConnection как Connector.open("socke://127.0.0.1:"+PORT); PORT = это твой зарегенный порт на серваке (Java, Apache и т.д.) -------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! ![]() |
|||
|
||||
VKoresh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
Dancer, Malkav - это, можно сказать, мое второе Я
![]() 1) Мой мидлет должен представлять собой клиент, котрый коннектится к серверу и может отсылать ему комманды и ,соответственно им, принимать изображения, звуки, музыку, текст и т.д. 2) Сервер представляет собой прогу на Delphi, которая спит и видит принять откуда-нибудь комманду. Т.е. перманентно ожидает коннекта. По коннекту отсылает соответствующее уведомление, из серии "молодец, я тебя вижу, теперь пришли мне еще комманду че тебе еще переслать". 3) Сервер ведет лог и там отображется что, мол 11:05:59 законнектился Вася Пупкин и т.д. Ответы шлет автоматически. В работе сервака я уверен больше, чем в том что солнце встает на востоке. ![]() ![]() Сейчас у меня такой трабл - коннектится просто зашибись, а ответ принять нормально не может...
С таким раскладом принимает один раз...последний ![]() Но, сам понимаешь, такое решение никуда не годится... Вот и начал придумывать себе прослушиватель... ![]() ЗЫ давай уж тут отписываться, а не на другом форуме. Пора прекратить на фиг эту путаницу. ![]() Это сообщение отредактировал(а) VKoresh - 4.7.2007, 11:43 |
|||
|
||||
VKoresh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
Как обрабатывать поступившие данные мне пока не важно. Мне надо чтоб он мог их принимать постоянно... |
|||
|
||||
W0LF |
|
||||||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Тебе для этого не нужно открывать второе соединение на телефоне.. Когда ты подрубился к серваку - он тебе уже сам может посылать все, что надо. Это ж тебе не хттп - отослал-принял, а соединение всегда открыто.
Ага.. понятно.. все намного проще.. и не надо серверов никаких на телефоне ![]() Я ж просил посмотреть на пример из WTK ![]()
-------------------- iOS developer |
||||||
|
|||||||
VKoresh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
Освобождайся, я подожду
![]() А что касается примера, то впрвх - Бесконечный Цикл?
А ввтрх - У меня большая часть кода как раз оттуда, но с некоторыми доработками.. и втртх - ![]() |
|||
|
||||
W0LF |
|
||||||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Хм, чуть освободилсо
![]()
тут все ясно
Тут тож ясно, класс Sender разберем ниже.
Sender надо расписывать? Это сообщение отредактировал(а) W0LF - 4.7.2007, 13:00 -------------------- iOS developer |
||||||
|
|||||||
VKoresh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
Если не затруднит... ![]() Но получается Бесконечный Цикл выполнится один раз? К примеру ситуация - отслал-принял-отослал-принял? каждый раз вызывать run? Я правильно понял? Это сообщение отредактировал(а) VKoresh - 4.7.2007, 15:42 |
|||
|
||||
W0LF |
|
||||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
нет, не правильно.. run() - это метод потока. он завершился - поток умер(очень грубо говоря). Бесконечный цикл ждет пакеты, внутренний цикл - считывает один пакет Тебе нужно просто запустить поток и все.. далее он будет работать Sender чуть позже распишу.. реально времени нет :(
Еще раз говорю : смотри в пример WTK. просто смотри что и как они делают. ![]() -------------------- iOS developer |
||||
|
|||||
VKoresh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
Тогда надо как-то отсылать параллельно с бесконечным циклом?
ЗЫ Пойду еще покурю мануалы ![]() Это сообщение отредактировал(а) VKoresh - 4.7.2007, 16:48 |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Да, класс Sender юзает отдельный поток и он же - потокобезопасен(синхронизирован) -------------------- iOS developer |
|||
|
||||
VKoresh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
Что-то меня вообще не в ту степь понесло... Получается, что вообще необязательно создавать отдельный класс и поток. Ведь есть InputStream. Проще дописать в CommandAction еще комманду которая будет пересылать что-нибудь. Сейчас сяду пробовать.
Это сообщение отредактировал(а) VKoresh - 4.7.2007, 18:19 |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
тебе нужно почитать про многопоточность
-------------------- iOS developer |
|||
|
||||
VKoresh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
Сейчас докатился до вот такого:
Принимает, однако параллельно с этим ничего не может сделать, т.е. не реагирует до тех пор пока все не получит. Также такой прикол - available возвращает число не больше 25! И еще вопрос можно сделать чтоб он не побайтно считывал а все сразу? Пробовал read(byte[] b), то ли не понял, то ли.. ![]() ЗЫ W0LF, не кинешь ссылку на какую-то инфу про многопоточность? Великий и Ужасный Гугл меня не понял... :( Это сообщение отредактировал(а) VKoresh - 5.7.2007, 13:20 |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Создание многопоточных приложений в Java
Добавлено через 1 минуту и 8 секунд А вообще : один топик - один вопрос. -------------------- iOS developer |
|||
|
||||
VKoresh |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 14.6.2007 Где: Запорожье Репутация: 1 Всего: 1 |
W0LF, спасибо! с помощью wait и notify реализовал! Такой довольный, хоть джигу пляши
![]() |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
На здоровье
![]() -------------------- iOS developer |
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
Здравствуйте! Решила не создавать новую тему, а задать вопрос в этой, так как десь обсуждается networkDemo. Сервер написан на дельфи, а клиента запускаю на эмуляторе, программу networkDemo. Код java не правила. Дело в том, что сервер от клиента принимает сообщения нормально, а вот клиент от сервера не принимает. Вернее, может и принимает, но в статусе не выводит, что сообщение получено. Можно было предположить, что с сервером что-то не так, но когда он посылает сообщения, то в окне эмулятора горит индикатор связи, значит, связь все таки есть. А сообщение так и не выводит (или не получает). В чем тут проблема?
|
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Проблема где-то в коде скорее всего
В смысле его надо показать Это сообщение отредактировал(а) W0LF - 4.2.2010, 13:57 -------------------- iOS developer |
|||
|
||||
Yelodia |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
Получение сообщения происходит здесь:
Но в текстовом поле si полученное сообщение не отображается, а только строка, которая устанавливается при соединении с сервером:
Вернее, если сервер запускать также через WTK, то все работает нормально. Но нужно, чтобы j2me клиент работал с сервером, написанным на Delphi, с которым имеет место эта проблема. Код отправки сообщения сервером:
Но проблема не в сервере, так как клиент на Delphi сообщения сервера принимает нормально Это сообщение отредактировал(а) Yelodia - 9.2.2010, 12:59 |
||||||
|
|||||||
Dancer |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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); } } -------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! ![]() |
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
Попробовала, не работает. Дело не в изменении объекта Item, так как изначально (то есть с сервером на j2me) работало и без этого обработчика. Изменила код так, что при получении сообщения выводилось уведомление Alert:
Нет никакой реакции, получается, что клиент от сервера вообще не принимает сообщения... |
|||
|
||||
Dancer |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 29.4.2005 Где: Nizhniy Novgorod Репутация: 33 Всего: 37 |
-------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! ![]() |
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
Запустила NetworkMonitor, там отправленная сервером строка отображается нормально, думаю, остальное нет смысла делать.
![]() А вот клиент по прежнему не реагирует на событие... Это сообщение отредактировал(а) Yelodia - 9.2.2010, 20:54 |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
а где после qwerty "\n" ?
это значит, что он будет ждать либо переход на новую строку в конце, чтоб хоть как-то понимать как бить пакеты или же разрыв соединения. Вы ему ни того ни другого не даете. Это сообщение отредактировал(а) W0LF - 10.2.2010, 00:11 -------------------- iOS developer |
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
Ой... И правда. Как всегда, глупая ошибка.
W0LF, спасибо! |
|||
|
||||
![]() ![]() ![]() |
FAQ раздела лежит здесь! |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |