Отправка дейтаграмм с помощью j2me

Я пишу простое приложение для мобильных телефонов (используя j2me) с взаимодействием клиент-сервер с использованием протокола дейтаграмм. Мобильное приложение отправляет текст на сервер, и сервер выводит этот текст на стандартный вывод. Вот код для отправки дейтаграмм (с мобильного телефона):

String ip;
String port;
String msg;
//Loading ip, port and msg from the user input, I won't write it here, 'cause it
//does not matter

//Below is a simple code snippet for sending msg to the ip:port address
connection = (DatagramConnection) Connector.open(
        "datagram://" + ip + ":" + port);

Datagram datagram = connection.newDatagram(msg.getBytes(),
            msg.getBytes().length);
connection.send(datagram);

Вот код для получения дейтаграмм (с ПК):

DatagramSocket s = new DatagramSocket(7777);        
DatagramPacket p = new DatagramPacket(new byte[1024], 1024);

s.receive(p);
System.out.println(new String(p.getData()));

Итак, когда я запускаю первый фрагмент кода (для отправки дейтаграмм) с помощью эмулятора, все работает нормально: сервер успешно принимает и печатает дейтаграммы. Но когда программа для отправки дейтаграмм запускается с мобильного телефона, дейтаграммы не доходят до сервера.

При тестировании программы через эмулятор IP-адресом был мой локальный сетевой IP-адрес, а при тестировании через реальный мобильный телефон IP-адрес брался из ссылки http://www.whatismyip.com/. При использовании прежнего IP для тестов эмулятора дейтаграммы также не доходят до сервера. Порт всегда был установлен на 7777.

Итак, могу ли я решить эту проблему?


person Qwertyu Wertyu    schedule 09.09.2012    source источник
comment
наблюдаете ли вы какие-либо исключения при тестировании на телефоне? Кроме того, поддерживает ли он дейтаграмму? согласно спецификации MIDP 2 этот протокол является необязательным   -  person gnat    schedule 09.09.2012
comment
нет, исключений нет   -  person Qwertyu Wertyu    schedule 09.09.2012


Ответы (1)


Ваш сервер должен иметь реальный общедоступный IP-адрес, чтобы он был доступен. Если он находится за прокси/брандмауэром, приложение Java ME не сможет получить к нему доступ.

Если возможно, попробуйте разместить свой сервер на каком-нибудь сервисе виртуализации (Amazon, Google и т. д.).

person Telmo Pimentel Mota    schedule 09.09.2012
comment
Но похоже, что у меня публичный IP... Или такие сервисы, как whatismyip.com, не гарантируют, что у меня есть публичный IP? Я подключен к Интернету через локальную сеть... - person Qwertyu Wertyu; 09.09.2012
comment
Я вошел на whatismyip.com из своей локальной сети на работе, и он дает мне два адреса: один для прокси-сервера, а другой - как обнаруженные IP-адреса локальной сети. Я дважды проверил с помощью ifconfig на терминале (Linux), и сайт показывает правильные значения. - person Telmo Pimentel Mota; 10.09.2012