[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) {}

取得了一个IP10.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);

}

 

 

 

posted @ 2005-11-09 00:24  旁观者  阅读(1818)  评论(10编辑  收藏  举报