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