Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java ME (J2ME) > ServerSocketConnection


Автор: W0LF 12.4.2006, 20:05
я так понял, что телефон может быть сервером, кто-нидь скажет, операторы России, Украины держат эту штуку? Там просто нужен hostname, правда есть такой метод, как getLocalAddress() у интерфейса ServerSocketConnection, но он может возвращать 0.0.0.0...
Никто не сталкивался? вот для примера( может кто скажет, как энто превратить в рабочий вариант?):

SocketConnection Interface
Код

...
SocketConnection client = (SocketConnection) Connector.open("socket://" + hostname + ":" + port);
// set application-specific options on the socket. Call setSocketOption to set other options
client.setSocketOption(DELAY, 0);
client.setSocketOption(KEEPALIVE, 0);
InputStream is = client.openInputStream();
OutputStream os = client.openOutputStream();
// send something to server
os.write("some string".getBytes());
// read server response
int c = 0;
while((c = is.read()) != -1) {
   // do something with the response
}
// close streams and connection
is.close();
os.close();
client.close();
...


ServerSocketConnection Interface
Код

... // create a server to listen on port 2500
ServerSocketConnection server = (ServerSocketConnection) Connector.open("socket://:2500");
// wait for a connection
SocketConnection client = (SocketConnection) server.acceptAndOpen();
// set application-specific options on the socket;
// call setSocketOption to set other options
client.setSocketOption(DELAY, 0);
client.setSocketOption(KEEPALIVE, 0);
// open streams
DataInputStream dis = client.openDataInputStream();
DataOutputStream dos = client.openDataOutputStream();
// read client request
String result = is.readUTF();
// process request and send response
os.writeUTF(...);
// close streams and connections
is.close();
os.close();
client.close();
server.close();
...


Заранее спасибо

Автор: W0LF 13.4.2006, 20:18
Все, я разобрался.Если кому надо, то в WTK22 есть пример...
Кстати пробовал с Life на Jeans и обратно - работает, ток там плавающие ip, их мона каждый раз отправлять с помощью WMA, но не все телефоны держат WMA...


Автор: DEMOVERSION 14.4.2006, 09:28
А можно пример и вообще что делает прога?

Автор: Dancer 14.4.2006, 10:02
В принципе - можно поднять сервер в тырнете, у которого будет определённый адрес, ну например: http://www.my_mobile_SSocket_switcher.ru
На этом серваке ведёшь что-то он-лайн логирования, а точнее: если кто-то захотел стать серверо, то должен прислать определённое сообщение, о том, что я такой-то такой-то (MIDlet) стал сервером и имею вот такое вот IP.
Приложение, которому нужен данный (Server-MIDlet) идёт по адресуhttp://www.my_mobile_SSocket_switcher.ru и смотрит, есть ли сейчас активные Server-MIDlet если да, то выбирает из списка нужный ему, ну или первый из списка и т.д. (думаю идея понятна)

Но если у нас телефон поддерживает возможность работы с HTTP из мидлета, то JSR-120 он точно может поддерживать smile

Хотя мой вариант имеет право на жизнь и вполне очень универсален. (ИМХО)

Автор: W0LF 14.4.2006, 13:51
Цитата(DEMOVERSION @ 14.4.2006, 09:28)
А можно пример и вообще что делает прога?

Прога - просто шашки по сети.

Автор: DEMOVERSION 17.4.2006, 09:14
я не понял, клиент коннектиться к веб-серверу или мобильнику напрямую?
если второй вариант то как? 

Автор: javastic 17.4.2006, 10:09
А я бы сделал через веб-сервер и всё было бы ГУД.  smile  

Автор: W0LF 17.4.2006, 14:28
К мобильнику напрямую!
а пример вот : 
http://forum.vingrad.ru/index.php?showtopic=91612&view=findpost&p=701283
Там в SocketConnection Interface
hostname = ServerSocketConnection.getLocalAddress();
то есть на сервере нужно взять LocalAddress(getLocalAddress()) ибо он плавающий, и передать клиенту(допустим с помощью WMA)
javastic,
Для лабы в универ, которая должна использовать сокеты это вполне подойдет smile
а вот сервера я никогда не писал  smile , ток немного jsp практиковал... 

Автор: Dancer 17.4.2006, 16:48
JSP - этого будет вполне достаточно, сидишь слушаешь, как только что-то тебе пришло на твою страницу, то берёшь разбираешь request, в зависимости от того, что пользователь в запросе к этой странице навыбирал (строчку запроса сформировал), в зависимости от этого делаешь ответ этому пользователю, ну и вносишь какую-то информацию в БД или ещё где ты будешь хранить записи о твоих шашечных баталиях)
Из мидлета, делаешь вызов http://www.my_site.ru/log_my_MID_server.jsp?name=NIK;reg_as_server=true;другая_информация( например, сколько этот серврер будет ждать пока к нему не подключиться кто-либо, по окончанию этого таймаута он отключается, ну и много чего ещё можно нафантазировать)

в JSP разбираешь параметры, исходя из того какие параметры есть и какое они имеют значение организуешь всю логику работы. Например если есть параметр reg_as_server=true то, тот кто сейчас стучиться, он является сервером для отальных и ожидает подсоединения к себе клинетов.
Получаешь IP с которого пришёл данный запрос, и заносишь это в своё хранилище (БД, XML, текстовый файл, Hashtable в памяти приложения на сервере, etc.) 

далее другой клиент идёт на страницу, на которой можно посмотреть есть ли сервера, которые ожидают подсоединения к себе клиентов, и по нику узнать кто ожидает. http://www.my_site.ru/servers_wait.jsp
вытаскиваем из БД или где мы там храним наши здаписи, всё что касается текущих серверов, которые ожидают к себе подключения, IP, ник того кто запустил этот сервер на телефоне, возможно время когда этот сервер стартанул своё ожидание, и возомжно таймаут для ожидания, ну и так далее.
Пользователь выбирает сервак (по IP или ещё как, не важно, главное что он знает IP сервера к которому хочет сконнектиться)
Далее коннектиться и играет.
По окончанию, с сервера-МИДЛЕТА может послаться результат как закончилась игра (возможно лог ходов и т.д.) на какакую либо специально созданную jsp или же уже на имеющиеся, с определённым набором параметров. 
Далее на серваке можно организовать лист рекордов (ну и что фантазия позволит) smile

А если всё будет прикольно работать, то можно идти искать, кто такое может купить для коммерческой эксплуатации smile
 

Автор: javastic 18.4.2006, 08:58
Цитата

Для лабы в универ, которая должна использовать сокеты это вполне подойдет 
а вот сервера я никогда не писал   , ток немного jsp практиковал... 


Да, для практики сойдёт, а для реально работающего приложения не очень. Ну представь если ты выпустил коммерческий продукт, а им смогут пользоваться только меньшенство, а большинство удалят его со своего телефона. Ничего сложного в написании сервера нет.

Добавлено @ 09:01 
Цитата

в JSP разбираешь параметры, исходя из того какие параметры есть и какое они имеют значение организуешь всю логику работы. Например если есть параметр reg_as_server=true то, тот кто сейчас стучиться, он является сервером для отальных и ожидает подсоединения к себе клинетов.


А можно сделать так: пользователь создает игру и автоматически является сервером. =)

Добавлено @ 09:11 
Кстати, предлагаю замутить какой-нибудь такой сетевой проект.  smile 
Шашки там, крестики нолики, морской бой или ещё чего, по графике не очень сложное.  smile 

Что скажете? 

Автор: erka 18.4.2006, 11:34
Идея вообще прикольная. Замутить то можно, только вот траблы могут быть с разными мобильными операторами(IP одни реальные дают, другие не реальные).   Кстати, для тех кто хочет что-то многопользовательское писать, сразу стоит отметить, что в j2me есть неприятное ограничение по количеству открытых активных соединений smile 

Автор: Dancer 18.4.2006, 13:19
Цитата(javastic @  18.4.2006,  08:58 Найти цитируемый пост)
А можно сделать так: пользователь создает игру и автоматически является сервером. =)

так телефон и является сервером, просто сервер в тырнете поднятый нужен для того, чтобы следить за тем, кто сейчас из пользователь стартован как сервере, чтобы можно было присоединиться к этой игре. Так как у нас IP на телефоне могут меняться каждый раз, когда мы будет регистриться как сервер, то для этого и нужен какой-то общий ресурс, на который можно будет давать информацию об IP стартованных серверов-МИДЛЕТОВ.

Как правильно заметил erka
Цитата(erka @  18.4.2006,  11:34 Найти цитируемый пост)
траблы могут быть с разными мобильными операторами(IP одни реальные дают, другие не реальные).   
 вот это вот действительно ЖОПА!!!!
 

Автор: dmitriy1111 18.4.2006, 18:28
javastic

http://www.wapportal.ru - шашки , шахматы ...  smile  

Автор: javastic 19.4.2006, 08:43
dmitriy1111, ну и что?  smile  "Велосипед не то что не надо изобретать, а нужно! Сделать его более совершенным, красивым и функциональным! Да, и седло конечно же под себя настроить. " ©Я.
Так что извини.  smile   

Автор: dmitriy1111 19.4.2006, 11:10
 Конкуренция всегда была только на пользу  smile  

Автор: W0LF 19.4.2006, 14:35
Ого, как тут все развили!
А мне нравится  smile 
Спасибо, Dancer, я понял идею на jsp. Я думаю, эт не составит труда и я обязательно разберусь...
Но пока просто использую WMA для передачи ip, очень мало времени просто... 

Автор: javastic 21.4.2006, 10:53
[QUOTE=так телефон и является сервером, просто сервер в тырнете поднятый нужен для того, чтобы следить за тем, кто сейчас из пользователь стартован как сервере, чтобы можно было присоединиться к этой игре. Так как у нас IP на телефоне могут меняться каждый раз, когда мы будет регистриться как сервер, то для этого и нужен какой-то общий ресурс, на который можно будет давать информацию об IP стартованных серверов-МИДЛЕТОВ.
[/QUOTE]

Я делал чат через мобилу и чтобы не париться с IP (т.к. он может у одного оператора меняться у другого нет), я создавал некий UserId при запуске мидлета, а после установления коннекта с сервером передавал его, после чего в пределах одного запуска мидлета общался с сервером через мой UID ,а сервер в свою очеред отдавал именно мне все запросы которые нужны. И так с каждым клиентом. Это можно применить и при игре. А если сделать ещё и регистрацию на сервере и он сгенерирует юзеру UID и отошлёт его мидлету, то можно просто в мидлете хранить этот UID и пользоваться им каждый раз при обмене данными. И не важен какой у клиента в следующий раз будет IP, потому что пакет в любом случае доставится.
  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)