• [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日星期三

     

  • 相关阅读:
    02_类和对象
    Django_数据库增删改查——增
    Django_同步数据库
    Django_models类属性。
    CSS_垂直居中
    CSS_背景属性
    CSS_定位
    CSS_浮动
    CSS_盒子模型
    CSS_元素的分类
  • 原文地址:https://www.cnblogs.com/zhengyun_ustc/p/ServerSocketConnection2.html
Copyright © 2020-2023  润新知