2

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

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

4

1 回答 1

1

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

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

于 2012-09-09T11:43:48.580 回答