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

news/2024/7/1 21:09:55

[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上。

 

上面的代码可以从

http://www.cnblogs.com/Files/zhengyun_ustc/GetDynamicIP-withAskServer.rar

下载;

安装的jar包从

http://www.cnblogs.com/Files/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日星期三

 

 

 

 

 

 

 

 

 

 





http://www.niftyadmin.cn/n/3649682.html

相关文章

云计算到底算啥?李彦宏、马化腾PK马云

一千个人眼里,有一千个云计算。作为一个热门词汇,“云计算”到底是什么,依然给人云里雾里的印象。在日前举办的IT领袖峰会(深圳)上,业界大佬围绕云计算的争议,成为峰会当天最大的“看点”。以百度CEO李彦宏、腾讯董事会主席马化腾为代表的技术派对云计算大泼冷水,与以阿里巴巴主…

ionic移动开发常用的HTML组件总结

ionic常用的11个组件 header组件list组件卡片组件复选框组件单选框组件下拉选择组件按钮组件chip组件图形组件输入组件栅格化组件 1、header组件 演示代码 <ion-header ><ion-toolbar><ion-title>ionic组件header部分</ion-title><ion-button s…

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

[JavaME]手机是否能够申请到动态IP?用ServerSocketConnection&#xff1f;http://www.j2medev.com/bbs/dispbbs.asp?boardid21&id4099&star1#2083 &#xff0c;这里是原始讨论贴。这里我们给出一个思路&#xff1a;可以先这样&#xff0c;手机先访问一个固定的网址&a…

给数学的孩子们推荐的十部经典电影~

0) 中文名称&#xff1a;死亡密码 英文名称&#xff1a;π 别 名&#xff1a;3.14159265358(USA) 发行时间&#xff1a;1998年07月10日 科幻惊栗手法描写一名天才数学家触目惊心的经历。才华盖世的数学家马斯在过去十年来&#xff0c;发现股票市场在混乱波动背后…

移动端开发——ionic集成toast消息提示插件

新建toast.service文件进行方法封装 1、新建文件命令 ionic g service service/toast2、toast.service完整代码 import { Injectable } from angular/core; import {ToastController} from "ionic/angular";Injectable({providedIn: root }) export class ToastSe…

如何创建Laravel雄辩的API资源以将模型转换为JSON

介绍 (Introduction) When creating APIs, we often need to work with database results to filter, interpret or format values that will be returned in the API response. API resource classes allow you to convert your models and model collections into JSON, work…

[JavaME]手机玩点对点MSN传情动漫之补充说明

代码将陆续上传。1&#xff1a;发送特定端口短信的MIDlet源代码可以从http://www.cnblogs.com/Files/zhengyun_ustc/MIMESMSSender.rar下载。其实实现的技术很简单&#xff0c;只要下载了 这两个例子程序&#xff0c;跑一遍&#xff0c;想想就能做出来了&#xff0c;呵呵。希望…

C/C++ 常见误区

1. C虽然主要是以C的基础发展起来的一门新语言&#xff0c;但她不是C的替代品&#xff0c;不是C的升级&#xff0c;C和C是兄弟关系。没有谁比谁先进的说法&#xff0c;更重要 的一点是C和C各自的标准委员会是独立的&#xff0c;最新的C标准是C98&#xff0c;最新的C标准是C99.因…