[JavaME]手机是否能够申请到动态IP?
用ServerSocketConnection?
http://www.j2medev.com/bbs/dispbbs.asp?boardid=21&id=4099&star=1#2083 ,这里是原始讨论贴。
这里我们给出一个思路:可以先这样,手机先访问一个固定的网址,然后就会被分配一个IP,这就是手机用来和外界联系的IP了。
Efei说,刚才测试了下,使用一段文档上提供的代码,也就那两三句话
try{
ServerSocketConnection scs = (ServerSocketConnection) Connector.open("socket://:1234");
frmMain.append("ip:" + scs.getLocalAddress());
}
catch (Exception e) {}
取得了一个IP:10.66.7.28。
这个IP外部网络是无法访问的,换言之,内部网络可以访问。
所以只要在移动的机房有服务器,你可以访问了
但是还有个问题,这个IP是动态变化的,所以至少需要客户端先访问服务器一下,让服务器知道你现在的IP。
确实如efei所说,我在手机上测试结果也是拿到了socket://10.15.134.128:4234,看来是没办法访问的了。但是我觉得虽然我们的位于Internet的服务器无法访问,但是也许另一部手机是可以访问这个地址的,所以手机的p2p理论上也许是可行的。
我的测试代码在http://www.cnblogs.com/Files/zhengyun_ustc/GetDynamicIP.rar下载,安装的jar包在http://www.cnblogs.com/Files/zhengyun_ustc/GetDynamicIP-deployed.rar下载,
Nokia7610测试通过。
朋友们也可以自己在真机上试验下这个程序。
用下面的代码可以得到一个socket 动态IP
|
//Use an unrestricted filter.
String filter = "*";
String url = "socket://:" + m_sSocketPort;
ServerSocketConnection ssc = null;
try
{
//Open the connection.
ssc =
(ServerSocketConnection) Connector.open(url);
System.out.println("/* Already Open the connection!");
//Discover the system-assigned port.
url = "socket://:" + ssc.getLocalPort();
//Register the connection now. The AMS will
//remember the registered URL even when the MIDlet
//is not active.
PushRegistry.registerConnection(url,
m_sMidletClassName, filter);
System.out.println("/* Already Register the connection now!" +
url);
//Now publish the push URL. We can use an HTTP
//POST or a socket or datagram for this.
String purl;
purl = "socket://" + ssc.getLocalAddress() +
":" + ssc.getLocalPort();
publishInboundConnection(purl, m_sMidletClassName);
}
|