Posted on 2005-11-09 00:27
讓變化成為計(jì)劃的一部分 閱讀(380)
評(píng)論(0) 編輯 收藏 所屬分類:
J2ME
[JavaME]手機(jī)是否能夠申請(qǐng)到動(dòng)態(tài)IP?
用ServerSocketConnection?
http://www.j2medev.com/bbs/dispbbs.asp?boardid=21&id=4099&star=1#2083 ,這里是原始討論貼。
這里我們給出一個(gè)思路:可以先這樣,手機(jī)先訪問一個(gè)固定的網(wǎng)址,然后就會(huì)被分配一個(gè)IP,這就是手機(jī)用來和外界聯(lián)系的IP了。
Efei說,剛才測(cè)試了下,使用一段文檔上提供的代碼,也就那兩三句話
try{
ServerSocketConnection scs = (ServerSocketConnection) Connector.open("socket://:1234");
frmMain.append("ip:" + scs.getLocalAddress());
}
catch (Exception e) {}
取得了一個(gè)IP:10.66.7.28。
這個(gè)IP外部網(wǎng)絡(luò)是無法訪問的,換言之,內(nèi)部網(wǎng)絡(luò)可以訪問。
所以只要在移動(dòng)的機(jī)房有服務(wù)器,你可以訪問了
但是還有個(gè)問題,這個(gè)IP是動(dòng)態(tài)變化的,所以至少需要客戶端先訪問服務(wù)器一下,讓服務(wù)器知道你現(xiàn)在的IP。
確實(shí)如efei所說,我在手機(jī)上測(cè)試結(jié)果也是拿到了socket://10.15.134.128:4234,看來是沒辦法訪問的了。但是我覺得雖然我們的位于Internet的服務(wù)器無法訪問,但是也許另一部手機(jī)是可以訪問這個(gè)地址的,所以手機(jī)的p2p理論上也許是可行的。
我的測(cè)試代碼在http://www.cnblogs.com/Files/zhengyun_ustc/GetDynamicIP.rar下載,安裝的jar包在http://www.cnblogs.com/Files/zhengyun_ustc/GetDynamicIP-deployed.rar下載,
Nokia7610測(cè)試通過。
朋友們也可以自己在真機(jī)上試驗(yàn)下這個(gè)程序。
用下面的代碼可以得到一個(gè)socket 動(dòng)態(tài)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);
} |