То, что вы планируете, просто прекрасно: телефоны могут прослушивать и сокеты.Если вы просто хотите иметь одноранговую связь и больше заинтересованы в приложении, которое вы пишете, вы, возможно, захотите взглянуть на JXTA , который является несколько популярной P2P-системой для Java.Я не знаю этого, и я слышал некоторые плохие вещи о его производительности, но для вашего приложения это могло бы подойти.
Но не так уж и сложно накатить свою собственную.Тем не менее, я не видел каких-либо HTTP серверных библиотек для Java ME, поэтому использование HTTP может оказаться более трудоемким, чем необходимо.Возможно, я бы просто реализовал пользовательский протокол через сокеты TCP, поскольку он, по-видимому, не должен был бы взаимодействовать с чем-либо уже существующим.javax.microedition.io
, и со стороны клиента это похоже на использование HTTP-соединений, то есть что-то вроде
String url = "socket://192.168.xxx.xxx:12345";
SocketConnection conn = (SocketConnection) Connector.open(url);
И тогда вы можете получить InputStream
и OutputStream
для соединения с этого, илиDataInputStream
и DataOutputStream
, если вы хотите отправить двоичные данные.
На стороне сервера вы должны сделать
String url = "socket://:12345";
ServerSocketConnection sock = (ServerSocketConnection) Connector.open(url);
SocketConnection conn = (SocketConnection) sock.acceptAndOpen();
acceptAndOpen
блокируется до установления соединения, так что есливажно, чтобы сервер делал что-то еще, убедитесь, что принятие соединения в его собственном потоке.
Предупреждение: когда я делал это несколько лет назад, я обнаружил, что просто слушаюрозетка не включает сеть на всех телефонах, поэтому, несмотря на то, что сервер начал слушать, к нему не удалось подключиться, потому чтов сети.Я обошел его так, чтобы открыть веб-браузер на телефоне, но достаточно открыть любой сокет для любого клиента, так что вы также можете сделать это из приложения, попытавшись открыть клиентское соединение.
Тамтакже называется Push Registry.Когда вы создаете свой Midlet, есть возможность зарегистрировать приложение с атрибутом MIDlet-Push
в файле JAD, так что вам не нужно запускать ваше приложение, но система разбудит его при попытке подключенияопределенный порт.На самом деле я никогда не реализовывал это, поэтому не могу дать больше советов по этому поводу.