[JavaME]手机是否能够申请到动态IP?
[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理论上也许是可行的。
我的测试代码在https://files.cnblogs.com/zhengyun_ustc/GetDynamicIP.rar下载,安装的jar包在https://files.cnblogs.com/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); } |