[JavaME]手机申请移动分配的动态IP(2)?

 

[JavaME]手机申请移动分配的动态IP2?

先用ServerSocketConnection.open然后向某服务器询问手机自己的IP

       Hi,继续上回的讨论《[JavaME]手机是否能够申请到动态IP?》。

       上回说到申请动态IP的调试顺序可能反了,经过今天的测试,应该是我后面谈到的顺序,而且其中有一步很关键。

总之,每次在真机Nokia7610上测试,通过

"socket://" + ssc.getLocalAddress() +

                                          ":" + ssc.getLocalPort();

得到的Socket地址每次都是10.16.195.219之类的;同时服务器看到的手机访问IP地址都不一样,比如:

211.136.72.122

211.136.74.24

211.136.74.8;

等等。当然,这个地址会不会还是移动自己的几个固定IP。如果真的是这样,不知道端口能否映射过去?比如我访问211.136.72.1228110端口,是否能映射到10.16.195.219:8110端口呢?这是一个未知数。

 

我的Internet服务器上部署了一个很简单的asp页面,用来查看浏览此页面的手机的客户端IP地址。

用下面的asp代码试图得到客户端的IP

<%

    '正常情况Request.ServerVariables ("REMOTE_ADDR")就能取得客户端的IP地址,

但如果客户端是使用代理服务器来访问,

    '那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址,

要想透过代理服务器

    '取得客户端的真实IP地址,就要使用

    'Request.ServerVariables("HTTP_X_FORWARDED_FOR")来读取,

但是需要注意的是:

    '如果客户端没有通过代理服务器来访问,

那么用 Request.ServerVariables ("HTTP_X_FORWARDED_FOR")

    '取到的值将是空的。

Ip_address = Request.ServerVariables ("HTTP_X_FORWARDED_FOR")

        If Ip_address = "" Then

           Ip_address= Request.ServerVariables ("REMOTE_ADDR")

        end if

        Response.Write "Client IP Address=" & Ip_address

%>

 

 

下面给出具体的思路以及代码:

首先,我们还是利用

用下面的代码可以得到一个socket 动态IP

String url = "socket://:" + m_sSocketPort;

ServerSocketConnection ssc = null;

try

{              

         // 先去访问网站,从而争取获得一个外部IP地址,而不是127.0.0.1

         OutboundConnection(m_sInternetUrl);

     //Open the connection.

     ssc =

        (ServerSocketConnection) Connector.open(url);

}

来试图“get the dynamically assigned address from the getLocalAddress() and getLocalPort() methods”。

这是我们起的第一个线程ThreadRegisterIP,这之后,ThreadRegisterIP可以通过PushRegistry.registerConnection来注册监听;也可以调用(SocketConnection) ssc.acceptAndOpen();等候其他人来访问这个socket端口,这样会导致线程ThreadRegisterIP处于listen状态。

特别值得关注的一点是,在(ServerSocketConnection) Connector.open(url)之前,我发现必须先去用HttpConnection看看一个Internet网站,然后再来ServerSocketConnection.open,这样才能够正确拿到socket://10.16.195.219:8110。不这么做,就会得到socket://127.0.0.1:8110这种地址。

ServerSocketConnection之后呢,我们另外起一个ThreadAskServerIP线程,它呢,发送HttpConnection.GET请求给我的服务器网页,这个网页会告诉我服务器看到的IP地址是什么。我把这个IP地址显示在midlet上。

 

上面的代码可以从

https://files.cnblogs.com/zhengyun_ustc/GetDynamicIP-withAskServer.rar

下载;

安装的jar包从

https://files.cnblogs.com/zhengyun_ustc/GetDynamicIP-deployed-withAskServer.rar下载。

本文属于讨论稿,提供的仅仅是建议和测试意见。

本文还可以从

http://www.cnblogs.com/zhengyun_ustc/archive/2005/11/09/ServerSocketConnection2.html 得到最新稿。

 

在现实测试中,每次这个IP地址都不一样。到底能不能通过这个IP地址找到手机,有待研究。

郑昀@ultrapower

类别

编写日期

Keyword: Mobile dynamicIP j2me midp ServerSocketConnection

讨论稿

2005119日星期三

 

posted @ 2005-11-09 16:06  旁观者  阅读(2031)  评论(2编辑  收藏  举报