[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.122的8110端口,是否能映射到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上。

 

上面的代码可以从

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

下载;

安装的jar包从

http://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


讨论稿


2005年11月9日星期三

 

时间: 2024-08-29 09:34:22

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

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

获取IP后是否可以和它通讯呢?        Hi,继续上回的讨论<[JavaME]手机是否能够申请到动态IP[2]?>.        上回说到申请动态IP是可以了,并且准备好了一个线程等候在socket://10.16.195.219:8110之类的端口上监听. 这次把代码修改了,完成了监听线程之后,就相当于起了一个Socket Server,一旦有人要连接它,就回复一个字符串说"God bless you!You are the No."后面加上是第几位访问者的序号.

一台EC2如果把Elastic IP拿掉后,怎么再让AWS分配一个动态IP给它

问题描述 一台EC2如果把ElasticIP拿掉后,怎么再让AWS分配一个动态IP给它 解决方案 解决方案二:如果子网设置的是自动分配ip或EC2起到时开启了自动获取ip功能后,EIP解绑了过几分钟会自动获取公网ip的解决方案三:重新启动实例就能获取了解决方案四:如果子网设置的是自动分配ip或在创建EC2设置了自动获取ip功能后,EIP解绑了过几分钟会自动获取公网ip的

[JavaME]手机是否能够申请到动态IP?

[JavaME]手机是否能够申请到动态IP? 用ServerSocketConnection? http://www.j2medev.com/bbs/dispbbs.asp?boardid=21&id=4099&star=1#2083 ,这里是原始讨论贴.   这里我们给出一个思路:可以先这样,手机先访问一个固定的网址,然后就会被分配一个IP,这就是手机用来和外界联系的IP了. Efei说,刚才测试了下,使用一段文档上提供的代码,也就那两三句话 try{       ServerSocke

上传图片,如何请求转发到动态ip的服务器上

问题描述 上传图片,如何请求转发到动态ip的服务器上 我的需求是: 通过网页或者手机通过http post上传一个图片,后台servlet接收到该HttpServletRequest实例后,根据一个工具类算法获取到处理给请求的服务器ip,然后将这个http request发送给该ip的服务器. 然后由该ip的服务器获取到网页或者手机上传的图片,存储到该服务器的本地磁盘上. 请问该怎样实现请求的转发呢? 我曾经考虑过使用jsp的forward,但forward只能转发到当前的servlet容器,而

ip-Azure能够提供动态IP和固定IP,固定IP是否能够提供移动或联通的呢?

问题描述 Azure能够提供动态IP和固定IP,固定IP是否能够提供移动或联通的呢? Azure能够提供动态IP和固定IP,固定IP是否能够提供移动或联通的呢? 解决方案 固定IPu应该可以,但应该都是azure申请的,不会可以选运营商. 解决方案二: azure有固定的ip段,而且不允许你指定. 解决方案三: Hi 我们在使用保留IP的时候是不可以选择运营商的,正如caozhy所说,azure会分配给你一个IP,关于保留IP的更多信息,请阅读:http://www.windowsazure.c

dlink路由器配置上网之动态IP配置上网(光纤入户)

光纤线路连接: 首次安装,建议准备两条网线.从光猫LAN口连接一条网线到路由器INTRNET口,再用另一条网线从路由器LAN口连接到电脑.若只有一条线,也可以先连接电脑和路由器,配置好路由器后再拔掉,重新连接到ADSL Modem和路由器INTERNET口:或用笔记本.手机等设备无线连接到路由器进行配置. 如图连线完成后,查看被连线接口对应的指示灯是否正常亮,如果不亮,请参考:指示灯不亮,如何处理? 登陆路由器管理界面: 打开浏览器在地址栏输入http://192.168.0.1  ,如图:  

C++中关于[]静态数组和new分配的动态数组的区别分析_C 语言

本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加深对C++语言数组的理解.具体区别如下: 一.对静态数组名进行sizeof运算时,结果是整个数组占用空间的大小: 因此可以用sizeof(数组名)/sizeof(*数组名)来获取数组的长度. int a[5]; 则sizeof(a)=20,sizeof(*a)=4.因为整个数组共占20字节,首个元素(int型)占4字节. int *a=new int[4];则sizeof(a)=sizeof(*a)=4,因为

Linux系统下设置静态IP或自动获取动态IP的简单方法

Linux下为机器设置静态IP地址: 代码如下:vim  /etc/sysconfig/network-scripts/ifcfg-eth0 修改这个文件内容如下形式: 代码如下:# Intel Corporation 82541GI Gigabit Ethernet ControllerDEVICE=eth0BOOTPROTO=static    #为静态的HWADDR=00:15:17:B2:DC:B5ONBOOT=yesIPADDR=10.20.134.199 #这个是设置的静态IP地址N

tplink路由器动态ip设置技巧

  tplink路由器动态ip设置方法 1.登录WEB管理界面,在地址栏中输入192.168.1.1,输入默认用户名和密码(一般均为admin/admin或参考路由器背面铭牌上有相关登陆信息). 2.进入无线路由器设置界面后,点左侧菜单栏并找到网络参数项---LAN设置考路由器背面铭牌上有相关登陆信息. 2.进入无线路由器设置界面后,点左侧菜单栏并找到网络参数项---LAN设置 3.将默认地址更改为想要的IP段即可,如:192.168.10.1 4.更改后点击保存,路由器会自动重启. 重启后,就