博文
WAP 简介(2008-10-02 19:37:00)
摘要:
WAP 协议被设计用来在无线客户端(比如移动电话)上展示因特网内容。
您应当具备的基础知识
在继续学习之前,您需要对下面的知识有基本的了解:
WWW, HTML 以及有关网页构建的基础知识
JavaScript
XML
如果您希望首先学习这些项目,请在我们的首页访问这些教程。
什么是 WAP?
无线产品提出了 WAP 的理念。此标准的要点是在无线设备上展示因特网内容。
WAP 指无线应用协议
WAP 是一种应用程序通信协议
WAP 被用来访问服务及信息
WAP 继承于因特网标准
WAP 针对诸如移动电话的手持设备
WAP 是一种为微浏览器设计的协议
WAP 使创建针对移动设备的 web 应用程序成为可能
WAP 使用标记语言 WML(不是 HTML)
WAP 作为 XML 1.0 的一种应用被定义
无线应用协议(Wireless Application Protocol)
WAP 是一种用于在无线终端(比如数字移动电话)进行信息服务的主要的标准。
WAP 标准基于因特网标准(HTML、XML 以及 TCP/IP)。它包括 WML 语言规范、WMLScript 规范以及无线电话应用接口规范(WTAI)。
WAP 由 WAP 论坛(WAP forum )发布,被爱立信、摩托罗拉、诺基亚以及 Unwired Planet 创建于 1997 年。论坛的成员目前占据着超过 90% 的全球手机市场,同时又是领先的基础设施提供商、软件提供商及其他机构。您可以在我们的 WAP 论坛页面找到有关 WAP 论坛的更多信息。
WAP 微浏览器
为了适合小型无线终端,WAP使用了一种微浏览器。
微浏览器是一种小型软件,可向硬件、内存和 CPU 发布基本的指令。它可以显示用一种由被称为 WML 的受限标记语言编写的信息。
微浏览器也可翻译一种被称为 WMLScript 的 JavaScript 简化版。
什么是 WML?
WML 指无线标记语言。它是一种从 HTML 继承而来的标记语言,但是 WML 基于 XML,因此它较 HTML 更严格。
WML 被用来创建可显示在 WAP 浏览器中的页面。用WML编写的页面被称为 DECKS。DECKS 是作为一套 CARDS 被构造的。
......
一个与联通的WAP接口(2008-10-02 17:31:00)
摘要:
最近ASP.NET WAP开发的一些情况!
最近要做一个与联通的WAP接口
我选择用ASP.NET开发,ASP.NET开发WAP站点,实在简单,就是一个移动控件的运用,根本不用懂WML语法.唯一不同的,就是一个ASPX文件可以支持多个FORM,不同FORM之间可以切换,
最后ASP.NET根据访问的设备,输出不同的内容,
如果用IE访问就输出HTML,手机访问,输出WML,
不过在开发过程中也遇到了很多问题,一些问题总结如下:
1.模拟器选择:
WINWAP,
M3Gate,
UP.SDK4.0,(推荐)
OPenWave 5.0 (测试时需要),
OPenWave6.2, (IIS 6.0应用,IIS5.0可能显示,但会有问题)
CheckCom WAPBrowser 3.2
模拟器问题:
ASP.NET把一些常有的模拟器,的配制信息用正则表达式写在Machine.config里
在上述的模拟器中,我只有UP.SDK4.0,OPenWave 5.0,
他们只是一个公司的产品:
需要下载,配制文件驱动更新:现在最新版本是:Device 4下载请到这里下载:
http://www.microsoft.com/downloads/details.aspx?FamilyId=02FA15FE-40D9-4DCE-9BB1-4DD61A5B7CCB&displaylang=en
但是,即使驱动更新以后,还是一些设备不能访问:
这时需要强制输出WML:
在web.config
添加下面内容<system.web>下
<browserCaps>
&n......
C++ 第6章指针6.3.2 用指针变量作函数参数接收数组地址(2008-10-02 12:22:00)
摘要:
在第5章5.4节中介绍过可以用数组名作函数的参数。前面已经多次强调: 数组名代表数组首元素的地址。用数组名作函数的参数,传递的是数组首元素的地址。很容易推想: 用指针变量作函数形参,同样可以接收从实参传递来的数组首元素的地址(此时,实参是数组名)。下面将第5章5.4节中的例5.7程序改写,用指针变量作函数形参。
例6.6 将10个整数按由小到大的顺序排列。
在例5.7程序的基础上,将形参改为指针变量。
#include <iostream>
using namespace std;
int main( )
{void select_sort(int *p,int n); //函数声明
int a[10],i;
cout<<″enter the originl array:″<<endl;
for(i=0;i<10;i++) //输入10个数
cin>>a[i];
cout<<endl;
select_sort(a,10); //函数调用,数组名作实参
cout<<″the sorted array:″<......
C++入门第6章指针6.3 数组与指针[续](2008-10-02 12:20:00)
摘要:
for(p=a;p<(a+10);p++)
cout<<*p<<″ ″; //p先后指向a[0]~a[9]
cout<<endl;
return 0;
}
运行情况与前相同。请仔细分析p值的变化和*p的值。
对3种方法的比较:
方法(1)和(2)的执行效率是相同的。第(3)种方法比方法(1)、(2)快。这种方法能提高执行效率。
用下标法比较直观,能直接知道是第几个元素。用地址法或指针变量的方法都不太直观,难以很快地判断出当前处理的是哪一个元素。
在用指针变量指向数组元素时要注意: 指针变量p可以指向有效的数组元素,实际上也可以指向数组以后的内存单元。如果有
int a[10],*p=a; //指针变量p的初值为&a[0]
cout<<*(p+10); //要输出a[10]的值
在使用指针变量指向数组元素时,应切实保证指向数组中有效的元素。
指向数组元素的指针的运算比较灵活,务必小心谨慎。下面举几个例子:
如果先使p指向数组a的首元素(即p=a),则:
(1) p++(或p+=1)。使p指向下一元素,即a[1]。如果用*p,得到下一个元素a[1]的值
(2) *p++。由于++和*同优先级,结合方向为自右而左,因此它等价于*(p++)。作用是: 先得到p指向的变量的值(即*p),然后再使p的值加1。例6.5(3)程序中最后一个for语句:
for(p=a;p<a+10;p++)
cout<<*p;
可以改写为
for(p=a;p<a+10;)
cout<<*p++;
(3) *(p++)与*(+......
C++ 第6章指针6.3 数组与指针(2008-10-02 12:19:00)
摘要:
6.3.1 指向数组元素的指针
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。所谓数组元素的指针就是数组元素的地址。
int a[10]; //定义一个整型数组a,它有10个元素
int *p; //定义一个基类型为整型的指针变量p
p=&a[0]; //将元素a[0]的地址赋给指针变量p,使p指向a[0]
在C++中,数组名代表数组中第一个元素(即序号为0的元素)的地址。因此,下面两个语句等价:
p=&a[0];
p=a;
在定义指针变量时可以给它赋初值:
int *p=&a[0]; //p的初值为a[0]的地址
也可以写成
int *p=a; //作用与前一行相同
可以通过指针引用数组元素。假设p已定义为一个基类型为整型的指针变量,并已将一个整型数组元素的地址赋给了它,使它指向某一个数组元素。如果有以下赋值语句:
*p=1; //对p当前所指向的数组元素赋予数值1
如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。
......
C++入门第6章指针 6.2.3 指针作为函数参数(2008-10-01 15:24:00)
摘要:
函数的参数不仅可以是整型、浮点型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送给被调用函数的形参。
例6.3 题目同例6.2,即对输入的两个整数按大小顺序输出。
这里用函数处理,而且用指针类型的数据作函数参数。
程序如下:
#include <iostream>
using namespace std;
int main( )
{ void swap(int *p1,int *p2); //函数声明
int *pointer_1,*pointer_2,a,b; //定义指针变量pointer_1,pointer_2,整型变量a,b
cin>>a>>b;
pointer_1=&a; //使pointer_1指向a
pointer_2=&b; //使pointer_2指向b
if(a<b) swap(pointer_1,pointer_2); //如果a<b,使*pointer_1和*pointer_2互换
cout<<″max=″<<a<<″ min=″<<b<<endl;//a已是大数,b是小数
return 0;
}
void swap(int *p1,int *p2) /......
C++ 第6章指针 6.2.2 引用指针变量[续](2008-09-30 13:17:00)
摘要:
图6.7
例6.2 输入a和b两个整数,按先大后小的顺序输出a和b(用指针变量处理)。
解此题的思路是: 设两个指针变量p1和p2,使它们分别指向a和b。使p1指向a和b中的大者,p2指向小者,顺序输出*p1,*p2就实现了按先大后小的顺序输出a和b。按此思路编写程序如下:
#include <iostream>
using namespace std;
int main( )
{
int *p1,*p2,*p,a,b;
cin>>a>>b; //输入两个整数
p1=&a; //使p1指向a
p2=&b; //使p2指向b
if(a<b) &......
C++ 第6章指针 6.2.2 引用指针变量(2008-09-30 13:14:00)
摘要:
有两个与指针变量有关的运算符:
(1) &取地址运算符。
(2) *指针运算符(或称间接访问运算符)。
例如: &a为变量a的地址,*p为指针变量p所指向的存储单元。
例6.1 通过指针变量访问整型变量。
#include <iostream>
using namespace std;
int main( )
{int a,b; //定义整型变量a,b
int *pointer_1,*pointer_2; //定义指针变量*pointer_1,*pointer_2
a=100;b=10; //对a,b赋值
pointer_1=&a; //把变量a的地址赋给pointer_1
p......
C++ 第6章指针 6.2.1 定义指针变量(2008-09-30 13:10:00)
摘要:
C++规定所有变量在使用前必须先定义,即指定其类型。在编译时按变量类型分配存储空间。对指针变量必须将它定义为指针类型。先看一个具体例子:
int i,j; //定义整型变量i,j
int *pointer_1, *pointer_2; //定义指针变量*pointer_1,*pointer_2
第2行开头的int是指: 所定义的指针变量是指向整型数据的指针变量。也就是说,指针变量pointer_1和pointer_2只能用来指向整型数据(例如i和j),而不能指向浮点型变量a和b。这个int就是指针变量的基类型。指针变量的基类型用来指定该指针变量可以指向的变量的类型。
定义指针变量的一般形式为
基类型 *指针变量名;
下面都是合法的定义:
float *pointer_3; // pointer_3是指向单精度型数据的指针变量
char *pointer_4; // pointer_4是指向字符型数据的指针变量
请注意: 指针变量名是pointer_3和pointer_4,而不是*pointer_3和*pointer_4,即“*”不是指针变量名的一部分,在定义变量时在变量名前加一个“*”表示该变量是指针变量。
那么,怎样使一个指针变量指向另一个变量呢?只需要把被指向的变量的地址赋给指针变量即可。例如:
pointer_1=&i; &nbs......
C++ 第6章指针 6.2 变量与指针(2008-09-29 17:32:00)
摘要:
指针变量是一种特殊的变量,它和以前学过的其他类型的变量的不同之处是: 用它来指向另一个变量。为了表示指针变量和它所指向的变量之间的联系,在C++中用“*”符号表示指向,例如,i_pointer是一个指针变量,而*i_pointer表示i_pointer所指向的变量,见图6.3。
下面两个语句作用相同:
① i=3;
② *i_pointer=3;
......