使用j2me发送数据报

时间:2012-09-09 10:05:22

标签: java networking java-me datagram

我正在编写一个简单的手机应用程序(使用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);

以下是接收数据报的代码(使用PC):

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。

那么,我可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您的服务器必须具有真实的公共IP才能访问它。如果它位于代理/防火墙之后,Java ME应用程序将无法访问它。

如果可能,请尝试在某些虚拟化服务(亚马逊,谷歌等)上托管您的服务器。