![]() |
Модераторы: javastic, AntonSaburov |
![]() ![]() ![]() |
|
alexdrob |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 3.11.2007 Репутация: нет Всего: нет |
Здравствуйте!
Начал изучать Java и сталкнулся с такой проблеммой, хочу сделать мидлет который будет подключаться к другому с помощью сокетов и посылать и принемать данные. как я понял что ессли для openInputStream() или openOutputStream() выполнить .close() то openInputStream() и openOutputStream() уничтожаются. передаю данные так
а принимаю так
так проблемма в том что код после кода приёма не выполняеться пока не выполню os.close(); т.е. получаеться что после каждой отправки данных нужно опять создавать SocketConnection? или яне правильно что то делаю |
||||
|
|||||
eugine_s |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
попробуй
|
|||
|
||||
alexdrob |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 3.11.2007 Репутация: нет Всего: нет |
а что это изменит? проблемма в последней строке
после закрытия больше нельзя пользовотся
вот функция отправки
первый раз вызывается норм, а второй не вызываеться |
||||||||||
|
|||||||||||
alexdrob |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 3.11.2007 Репутация: нет Всего: нет |
выложу весь код проги, эту прогу делаю для изучения работы сокетов:
Main
NetServer
NetClient
|
||||||
|
|||||||
alexdrob |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 3.11.2007 Репутация: нет Всего: нет |
вообщем вроде разобрался с этим, но появилась новая проблемма, на эмуле всё норм работает, а сотовый не можект выполнять роль сервера.
если комп запустить первым то он в роли сервера, потом запустить сотовый и он конектится и всё работает. если сотовый запустить первым, то он доходит до строки
и на этом виснет. пробовал на самсунге i710 и на SE c702 работать должно так: прога конектится к http://stone-decor.ru/xNetBat.php и в ответ приходит OK а IP сервера сохраняеться на хостинге http://stone-decor.ru/xNetBat.php после этого когда конектится другая прога ей приходит IP сервера (первой проги) код приложения ниже: Main
NetSocket
Это сообщение отредактировал(а) alexdrob - 20.2.2009, 17:41 |
||||||
|
|||||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
-------------------- iOS developer |
|||
|
||||
alexdrob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 3.11.2007 Репутация: нет Всего: нет |
я использую этот метод
из этого кода выполняеться только первая строка, а на второй строке просто зависает и всё. ошибки не появляються, просто виснет. НО если запустить не на сотовом а на эмуляторе на компе то всё работает норм |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
потому что сначала у сервера нужно взять host
вот у тебя там в метод start() передавался cIP. откуда ты его брал?? тебе сначала нужно взять у серверсокета getLocalAddress() это и есть хост, а потом на него рубиццо с клиента Добавлено через 5 минут и 12 секунд нашел. ты его вычитываешь с какого-то пхпшного сервака. он втупую ОК возвращает.... то есть ты коннектишься к OK хосту??? смысл такой - создаешь сервер сокет, узнаешь хост, отправляешь например смской куда-нидь клиенту этот хост, далее клиент берет этот хост и рубиццо к нему по сокету. НО, не все операторы определяют нормально хост, с этим траблов в поряде может быть -------------------- iOS developer |
|||
|
||||
alexdrob |
|
||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 3.11.2007 Репутация: нет Всего: нет |
php файл по очереди возвращает либо OK либо IP адрес. это просто зделанно чтобы первый подключивщийся был сервер второй клиент. но проблемма не в том. адрес нужен клиенту а виснет серв на строке
т.е. весь код до этой строки выполняеться а после неё нет. доходит до неё и останавливаеться. не каких ошибок не вылетает. НО не работает только если запустить на сотовом, пробовал на разных и на разных сетях. с компа с эмулятара серв запускаеться и работает. |
||||
|
|||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
теперь давай разберемся: на телефоне меняется текст на "YOU SERVER!" а потом "WAIT CLIENT!" не показывается а на эмуляторе показывается? Вообще это плохая практика - менять гуй из другого потока, не синхронизируя, например блекберри не позволит такое сделать.. в j2me это вроде как разрешается. то есть у тебя меняется на дисплее текст на - YOU SERVER! ? Второй вопрос, который меня интересует - а где пхпшный сервак берет айпишник для твоего сервер-телефона? он ему что, сам его придумывает? -------------------- iOS developer |
|||
|
||||
alexdrob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 3.11.2007 Репутация: нет Всего: нет |
Да текст меняеться на YOU SERVER
IP берётся так: запускаю сотовый он обращаеться к пхп файлу этот файл проверяет текстовый файл на сервере, если он пустой то он записывает туда IP того телефона который обратился, потом второй телефон обращаеться к файлу файл проверяет текстовый файл и берёт оттуда IP первого телефона и отправляет второму телефону. Но с IP проблем нет, серверу IP вообще не нужен. это клиенту нужен, но клиент работает и конектится, если эмулятор с компа запустить. Мне сказали что NAT сотовых провайдеров не пропускает пакеты к сотовым. Т.е. на телефоне серв типа не запустится, только клиент. |
|||
|
||||
W0LF |
|
||||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Ну у меня ж он какого-то фига два года назад запускался на sonyericsson k500i а со временем и на nokia3250..
Кароче, к чему я все веду. Мне кажеццо, что у тебя реально виснет на
и ждет, что клиент не могет подконнектиться.
проверь пожалуйста, айпи, который взял сервер и тот, который вернул getLocalAddress() одинаковы? открой просто на телефоне серверсокет, выведи для себя его getLocalAddress() возьми у него же, а потом просто в другом телефоне перед запуском сделай возможность ввода айпишника, введи его и подконнектись с ним к серверу. просто попробуй сделать так -------------------- iOS developer |
||||
|
|||||
alexdrob |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 3.11.2007 Репутация: нет Всего: нет |
вообщем я сделал серв на яве на компе запускаю, оба телефона конектятся и игра заработала))
|
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
ну, это как бы оптимальное решение =)))
-------------------- iOS developer |
|||
|
||||
gosnis |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 16.5.2007 Где: Тель Авив, Израил ь Репутация: 1 Всего: 2 |
На мой взгляд, самое правильное решение. Game engine, сидит на сервере, а клиенты только прорисовывают текущее положение. По идее это должно облегчить и работу аппликации. Учитывая ограничения в ресурсах и мощностях телефонов, это только на пользу. |
|||
|
||||
![]() ![]() ![]() |
FAQ раздела лежит здесь! |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |