PalmWebOSSDK开发环境安装图文教程

【菜科解读】
首先:安装java sdk我目前安装的版本是:jdk-6u22-windows-i586.exejava sdk下载地址:http://www.cr173.com/soft/14285.html
可以在DOS窗口下运行java -version命令查看是否安装过java sdk,以上表示安装过了。
(这是我安装后截的图)
点击:下一步
默认安装在C盘下,当然也可以安装在其它盘符下,如D盘(我就安装在D盘),建议使用默认位置安装。
这个也可以安装在其它盘符下,建议使用默认位置安装。
(因为我已经使用D盘安装了,所以我统一位置。
)
安装java sdk还是比较快速的,点击完成。
就OK了。
可以回到第一个图片那样,在DOS运行java -version命令查看是否已经安装成功。
第二:安装VirtualBox我当前安装的版本为:VirtualBox-3.2.10-66523-Win.exe;VirtualBox-4.0开发过程中确实有些问题,至少在webOS 1.45上面遇到过。
我建议是安装VirtualBox-3.2版本。
VirtualBox官方下载地址:http://www.virtualbox.org/wiki/Download_Old_Builds_3_2(看提示下载,如:VirtualBox 3.2.12 for Windows hosts x86/AMD64,就是我所需要下载安装的版本)OK,下面开始安装:
这个点:Next,下一步:
接受协议,国外的软件默认下是不勾选同意项的,不像国内的软件那样会强奸用户。
点击:Next,下一步:
VirtualBox默认是安装在C盘下的,你也可以安装它在其它的盘符下(如我就安装它在D盘),建议不用改变。
这两项默认是勾选的,意思是创建桌面快捷方式及快速启动栏,就那样让它们勾选吧,点击:Next,下一步:
这个好像是与网卡一关的,不管,点击Yes。
(期间可能会重启一下网卡)
Install,安装它:
如金山、360等安全软件会跳出这个提示框,以下的步骤也会出现几次,直接允许它们。
点击Finish,就完成了VirtualBox的安装。
在桌面就有如上图的图标,点击打开:
就会看到以上的画面提示,点确定、忽略。
我上面的图片显示已经有4个虚拟项目了,这是因为我前面没有卸载完毕的原因,新安装的VirtualBox是没有的(前面我没有删除.VirtualBox\HardDisks文件夹下的文件)。
呵呵,还没有安装webOS SDK,以前安装的虚拟机照样能运行哦。
截止以上,VirtualBox已经安装完毕。
下面安装webOS SKD吧。
第三:安装webOS SKDwebOS SKD下载:webOS SKD官方下载区:https://developer.palm.com/115优盘下载地址:http://www.cr173.com/soft/34242.htmlPalm_webOS_SDK-Win-1.4.5-465-x86.exe:http://u.115.com/file/f18324a4ePalm_webOS_SDK-Win-2.0-477-x86.exe:Palm_webOS_SDK-Win-3.0.0-611-x86.exe:http://u.115.com/file/f110044ec6webOS SKD有许多版本,可以说得是:不少。
上面的你可以下载其中一个测试安装。
我是webOS 1.45为例安装:
双击打开exe安装文件,如出现以上画面,等。
。
。
不要点Cancel 哦。
欢迎页面,Next,安装之:
同意协议,Next,安装之:
这个是选择安装的类型,默认选择:Complete,当然你选择自定义:Custon;(我选择Custon,是因为我想要区分安装不同的版本SKD)建议保留默认选择:Complete,对新人比较好弄懂第一步的操作。
安装的位置默认在C盘:C:\Program Files\Palm\SDK\,建议也不要改变,除非你现在是安装第二个版本的SDK。
如果你更改了安装位置,这里也会随之改变。
如果没有更改,这里显示的就是:C:\Program Files\Palm\SDK\
像这种提示框,前面说过了,直接允许它。
安装到后面这个步骤,可能要等久一点点,请耐心。
Finish,点击完成它。
这样,在你桌面就可以看到这两个文件夹了。
在Palm webOS SDK文件夹里面,点击Palm Emulator快捷方式打开窗口,当然你也可以在安装的文件夹下面打开它。
(如果你安装的路径改变了的话,你必须修改一下路径。
)
打开之后,就是出现这个窗口,现在你可以选择一个虚拟机了,这里有两种类型的分辨率:320x400及320x480的(这是webOS 1.45的,若是webOS 3.0,那就有1024x768的分辨率选项了。
)
进入的画面的截图
进入的画面会有几个这样的提示框出现,点击它。
终于看到了Palm webOS的系统界面了吧,这是webOS 1.45版本的,每个版本界面都有些区别。
如webOS 3.0,LOGO就改变HP的了。
关闭退出时,有三个选项,默认为:强制退出,建议为:快速休眠。
现在,在VirtualBox里面,就可以看到刚刚的那个虚拟机的项目,当然你可能建立多个项目的(同上:点击Palm Emulator快捷方式创建),删除了再建立也是没问题的。
OK。
以上是算完成了Palm WebOS SDK的安装,以及可以运行WebOS虚拟机了!webOS有不同的版本,我们当然也要安装不同的WebOS SDK版本在同一电脑上面了,以下图片是安装不同版本的SDK的操作相关图片:
PalmWebOSSDK,开发,环境,安装,图文,教程,首先Ecplise编译Cygwin环境、使用CDT插件开发C/C++
编译环境采用的是Cygwin。
使用Ecplise4.2 + CDT8.1.2 +Cygwin2.774。
建议先阅读第6条的注意事项。
强烈介意:先安装配置cygwin再安装cdt插件一、具体安装步骤为了保证安装顺利,请按以下步骤来进行。
1、安装Cygwin下载地址:http://cygwin.com/setup.exe官网:http://cygwin.com/下载好后,点击setup.exe进行安装,出现如下图所示界面 点击“NEXT”后我们看到如下界面:我们看到有三种安装模式:Install from Internet,这种模式直接从Internet安装,适合网速较快的情况;Download Without Installing,这种模式只从网上下载Cygwin的组件包,但不安装;Install from Local Directory,这种模式与上面第二种模式对应,当你的Cygwin组件包已经下载到本地,则可以使用此模式从本地安装Cygwin。
从上述三种模式中选择适合你的安装模式,这里我们选择第一种安装模式,直接从网上安装,当然在下载的同时,Cygwin组件也保存到了本地,以便以后能够再次安装。
选中后,点击“下一步”。
这一步选择Cygwin的安装目录,以及一些参数的设置。
默认的安装位置是C:\cygwin\,你也可以选择自己的安装目录,然后选择“下一步”,这一步我们可以选择安装过程中从网上下载的Cygwin组件包的保存位置,选择完以后,点击“下一步”,这一步选择连接的方式,选择你的连接方式,然后点击下一步,会出现选择下载站点的对话框,如下图所示,此步选择第一个163提供的镜像网站就可以,国内下载速度挺快,如果有其他镜像,可以输入URL后,点击“Add”进行添加,然后再在列表中选中。
选择完成后,点击“下一步”,进过下载几个文件后显示如下界面下面就在这个界面中下载我们需要编译C/C++代码的Packages,我们只需要下载“Devel”分支下几个包就可以了,gcc,gcc-core,gcc-g++,gcc-mingw-core,gcc-mingw-g++,make ,gdb,binutils。
在上图的search框中输入gcc,程序会自动进行搜索,如下图,通过选择“Devel”分支下的包,找到安装我们需要的包,然后点击Skip来选择最新的安装包这是已经成功安装最新版本包后的图示,大家单击“Skip”来选择最新版本的安装。
同理,输入“make”后,选择“Devel”分支下的包,下载如图所示的包:输入“gdb”后,选择“Devel”分支下的包,下载如图所示的包:输入“binutils”后,选择“Devel”分支下的包,下载如图所示的包:选完以后,我们选择下一步,进入安装过程,如下图所示,安装的时间依据你选择的组件以及网络情况而定。
安装完成后,安装程序会提示是否在桌面上创建Cygwin图标等,点击完成退出安装程序。
2、配置Windows的环境变量熟悉Java开发环境的都应该知道怎么找到环境变量,实在不知道的去百度下吧。
将cygwin\bin目录加入到环境变量PATH中。
然后,打开cmd命令行窗口,分别试一下gcc , g++命令。
如果显示“访问被拒绝” (access denied), 进入cygwin安装目录\bin下检查g++.exe, gcc.exe是否只有1k大小,如果是,那么文件是符号链接,那么把文件重命名一下(备份)。
然后把g++-3.exe(或者g++-4.exe)拷贝一份,重命名为g++.exe。
把gcc-3.exe拷贝一份,重命名为gcc.exe。
3、下载Ecplise CDT插件下载地址:http://www.eclipse.org/cdt/downloads.php参考:Ecplise插件的安装的四种方法。
或者通过Ecplise自动升级功能进行安装,如下图所示:添加地址:http://download.eclipse.org/tools/cdt/releases/juno4、配置Ecplise的C/C++开发环境(1)设置Ecplise与Cygwin的路径映射按以下步骤打开Ecplise:Window -> Preferences->C/C++->Debug-> Common Source Lookup Path -> add -> new "Path Mapping".映射方法,如下图:eclipse中调试时,由于GDB使用的unix格式的路径,而eclipse使用的是windows路径,导致找不到匹配的代码, 把linux的路径映射windows的路径:比如 /cygwin/c 映射成 C:\ 。
(2)配置C/C++的"Makefile Project",选择“PE Windows Parser", 和”Cygwin PE Parser" 两项。
5、在Ecplise中创建工程编写C/C++代码(1)创建C/C++工程点击”Next“,显示如下图:点击”Next“,显示如下图:点击”Finish“完成创建。
当编写好代码后,可以对你的工程进行编译,点击“Project”选项下的"Builder Project"项目即可。
编译后的工程,如下图所示:此时是成功编译后“Consloe”控制台的显示画面。
点击上面选中的,然后点击鼠标右键,选择“Run”,即可运行程序。
此时控制台即可打印出文字了。
到此我们就完成了Ecplise + CDT + Cygwin开发环境的配置,以后你就可以享用其方便的功能了。
6、常见问题1、Eclipse下的CDT创建C++项目时候,不能自动生成includes文件夹有两种解决方法:(1)打开Window -> Preferences->C/C++->Environment,如下图所示,添加两个环境变量将C_INCLUDE_PATH 设为 /usr/include将CPLUS_INCLUDE_PATH 设为 /usr/include/c++如果在Cygwin的/usr/include/目录下没有c++这个目录,可以从\cygwin\lib\gcc\i686-pc-cygwin\3.4.4\include\c++拷贝一个到目录下,或者直接添加这个目录都可以。
此步也可以解决代码中提示的显示信息”Unresolved inclusion:“问题,尽管不影响编译,只是无法定位头文件中的符号。
(2)在Windows里面,加入环境变量CPLUS_INCLUDE_PATH 和C_INCLUDE_PATH,并都设置成,安装的Cygwin的对应lib路径:D:\cygwin\lib然后再新建C/C++项目的时候,就可以自动生产Includes文件夹了。
2、用eclipse 建立编译C++工程出现错误提示 “symbol could not be resolved”问题原因:是debug下的source lookup path没有映射正确。
解决办法:window -> preferences -> C/C++ -> debug -> source lookup path > Path Mapping\cygdirve\c C:\用cygwin下的c盘来替代当前的C盘 来查找需要的库文件,如果你的Cygwin安装在C盘,则映射C盘,如果安装在D盘,则映射为\cygdirve\d D:\,其他盘同理。
3、用eclipse 建立编译C++Debug工程出现错误提示以下错误依然是上面映射的问题,打开Cygwin自带的“Cygwin Terminal”,然后输入以下命令“mount”如图所示:上面就是我们设置的映射,如果没有你的Ecplise的Workspace所在的盘的位置的映射,请按照上面的说明进行添加,即可调试成功。
例如,我的Workspace在D:盘下,则我想调试程序,必须映射到D盘的位置。
4、解决Eclipse的CDT编写的c/c++程序的运行结果不能输出到console的问题(1)设置“Debug Configurations"里的“Environment”选项,添加PATH,指定X:\cygwin\bin的路径。
如图所示(2)如果build不能通过(编译正常通过后会出现类似下面的输出)**** Build of configuration Debug for project Test ****make allmake: Nothing to be done for `all‘.**** Build Finished ****请按照上面步骤重新安装。
Ecplise,编译,Cygwin,环境,、,使用,CDT,
C#开发之Socket网络编程TCP/IP层次模型、端口及报文等探讨
http协议在应用层运行。
02,传输层(Tanspot):传输层包括UDP和TCP,UDP几乎不对报文进行检查,而TCP提供传输保证。
03,网络层(Netwok):网络层协议由一系列协议组成,包括ICMP、IGMP、RIP、OSPF、IP(v4,v6)等。
04,链路层(Link):又称为物理数据网络接口层,负责报文传输。
然后我们来看下tcp层次模型图 从上图中可以看出,应用程序在应用层运行,在传输层,在数据前加上了TCP头,在网络层加上的IP头,在数据链路层加上了帧。
2、端口端口号范围:0-65535,总共能表示65536个数。
按端口号可分为3大类 (1)公认端口(WellKnownPorts):从0到1023,它们紧密绑定(binding)于一些服务。
通常这些端口的通讯明确表明了某种服务的协议。
例如:80端口实际上总是HTTP通讯。
(2)注册端口(RegisteredPorts):从1024到49151。
它们松散地绑定于一些服务。
也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。
例如:许多系统处理动态端口从1024左右开始。
(3)动态和/或私有端口(Dynamicand/orPrivatePorts):从49152到65535。
理论上,不应为服务分配这些端口。
实际上,机器通常从1024起分配动态端口。
3.TCP和UDP报文 下面一起来看下TCP和UDP的报文图 从图中我们可以看出TCP和UDP中都有校验和,但是在UDP报文中,一般不使用校验和,这样可以加快数据传输的速度,但是数据的准确性可能会受到影响。
换句话说,Tcp协议都有校验和,为了保证传输数据的准确性。
3.Socket Socket包括Ip地址和端口号两部分,程序通过Socket来通信,Socket相当于操作系统的一个组件。
Socket作为进程之间通信机制,通常也称作”套接字”,用于描述IP地址和端口号,是一个通信链的句柄。
说白了,就是两个程序通信用的。
生活案例对比: Socket之间的通信可以类比生活中打电话的案例。
任何用户在通话之前,首先要占有一部电话机,相当于申请一个Socket,同时要知道对方的号码,相当于对方有一个固定的Socket,然后向对方拨号呼叫,相当于发出连接请求。
假如对方在场并空闲,拿起 电话话筒,双方就可以进行通话了。
双方的通话过程,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。
通话结束后,一方挂起电话机,相当于关闭socket,撤销连接。
注意:Socket不仅可以在两台电脑之间通信,还可以在同一台电脑上的两个程序间通信。
4,端口进阶(深入) 通过IP地址确定了网络中的一台电脑后,该电脑上可能提供很多提供服务的应用,每一个应用都对应一个端口。
在Internet上有很多这样的主机,这些主机一般运行了多个服务软件 ,同时提供几种服务,每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务(应用程序) 例如:http 使用80端口, ftp使用21端口 smtp使用25端口5.Socket分类 Socket主要有两种类型:流式Socket 是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但是效率低 2,数据报式Socket 是一种无连接的Socket,对应于无连接的UDP服务应用,不安全,但效率高6. Socket一般应用模式(服务器端和客户端) 服务器端的Socket(至少需要两个) 01.一个负责接收客户端连接请求(但不负责与客户端通信) 02.每成功接收到客户端的连接便在服务器端产生一个对应的复杂通信的Socket 021.在接收到客户端连接时创建 022. 为每个连接成功的客户端请求在服务器端都创建一个对应的Socket(负责和客户端通信) 客户端的Socket必须指定要连接的服务器地址和端口通过创建一个Socket对象来初始化一个到服务器端的TCP连接 通过上图,我们可以看出,首先服务器会创建一个负责监听的socket,然后客户端通过socket连接到服务器指定端口,最后服务器端负责监听的socket,监听到客户端有连接过来了,就创建一个负责和客户端通信的socket。
下面我们来看下Socket更具体的通信过程:Socket的通讯过程 服务器端: 01,申请一个socket 02,绑定到一个IP地址和一个端口上 03,开启侦听,等待接收连接 客户端: 01,申请一个socket 02,连接服务器(指明IP地址和端口号) 服务器端接收到连接请求后,产生一个新的socket(端口大于1024)与客户端建立连接并进行通信,原监听socket继续监听。
注意:负责通信的Socket不能无限创建,创建的数量和操作系统有关。
7.Socket的构造函数 Public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolTYpe) AddressFamily:指定Socket用来解析地址的寻址方案。
例如:InterNetWork指示当Socket使用一个IP版本4地址连接 SocketType:定义要打开的Socket的类型 Socket类使用ProtocolType枚举向Windows Sockets API通知所请求的协议注意: 1,端口号必须在 1 和 65535之间,最好在1024以后。
2,要连接的远程主机必须正在监听指定端口,也就是说你无法随意连接远程主机。
如:IPAddress addr = IPAddress.Parse("127.0.0.1");IPEndPoint endp = new IPEndPoint(addr,,9000); 服务端先绑定:serverWelcomeSocket.Bind(endp) 客户端再连接:clientSocket.Connect(endp) 3,一个Socket一次只能连接一台主机 4,Socket关闭后无法再次使用 5,每个Socket对象只能与一台远程主机连接。
如果你想连接到多台远程主机,你必须创建多个Socket对象。
8.Socket常用类和方法 相关类: IPAddress:包含了一个IP地址 IPEndPoint:包含了一对IP地址和端口号方法: Socket():创建一个Socket Bind():绑定一个本地的IP和端口号(IPEndPoint) Listen():让Socket侦听传入的连接吃那个病,并指定侦听队列容量 Connect():初始化与另一个Socket的连接 Accept():接收连接并返回一个新的Socket Send():输出数据到Socket Receive():从Socket中读取数据 Close():关闭Socket,销毁连接 接下来,我们同一个简单的服务器和客户端通信的案例,来看下Sokcet的具体用法,效果图如下:关键代码:服务器端代码: 1 private void Form1_Load(object sender, EventArgs e) 2 5 Control.CheckForIllegalCrossThreadCalls = false; 11 private void btnListen_Click(object sender, EventArgs e) 13 { 15 //ip地址 17 IPAddress ip = IPAddress.Parse(txtIP.Text); 19 // IPAddress ip = IPAddress.Any; 21 //端口号 23 IPEndPoint point=new IPEndPoint(ip,int.Parse(txtPort.Text)); 25 //创建监听用的Socket 27 /* 29 * AddressFamily.InterNetWork:使用 IP4地址。
31 SocketType.Stream:支持可靠、双向、基于连接的字节流,而不重复数据。
此类型的 Socket 与单个对方主机进行通信,并且在通信开始之前需要远程主机连接。
Stream 使用传输控制协议 (Tcp) ProtocolType 和 InterNetworkAddressFamily。
33 ProtocolType.Tcp:使用传输控制协议。
35 */ 37 //使用IPv4地址,流式socket方式,tcp协议传递数据 39 Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); 41 //创建好socket后,必须告诉socket绑定的IP地址和端口号。
43 //让socket监听point 45 try 47 { 49 //socket监听哪个端口 51 socket.Bind(point); 53 //同一个时间点过来10个客户端,排队 55 socket.Listen(10); 57 ShowMsg("服务器开始监听"); 59 Thread thread = new Thread(AcceptInfo); 61 thread.IsBackground = true; 63 thread.Start(socket); 65 } 67 catch (Exception ex) 69 { 73 ShowMsg(ex.Message); 75 } 77 } 79 //记录通信用的Socket 81 Dictionary dic=new Dictionary(); 83 // private Socket client; 85 void AcceptInfo(object o) 87 { 89 Socket socket = o as Socket; 91 while (true) 93 { 95 //通信用socket 97 try 99 {101 //创建通信用的Socket103 Socket tSocket = socket.Accept();105 string point = tSocket.RemoteEndPoint.ToString();107 //IPEndPoint endPoint = (IPEndPoint)client.RemoteEndPoint;109 //string me = Dns.GetHostName();//得到本机名称111 //MessageBox.Show(me);113 ShowMsg(point + "连接成功!");115 cboIpPort.Items.Add(point);117 dic.Add(point, tSocket);119 //接收消息121 Thread th = new Thread(ReceiveMsg);123 th.IsBackground = true;125 th.Start(tSocket);127 }129 catch (Exception ex)131 {133 ShowMsg(ex.Message);135 break;137 }139 }141 }143 //接收消息145 void ReceiveMsg(object o)147 {149 Socket client = o as Socket;151 while (true)153 {155 //接收客户端发送过来的数据157 try159 {161 //定义byte数组存放从客户端接收过来的数据163 byte[] buffer = new byte[1024 * 1024];165 //将接收过来的数据放到buffer中,并返回实际接受数据的长度167 int n = client.Receive(buffer);169 //将字节转换成字符串171 string words = Encoding.UTF8.GetString(buffer, 0, n);175 ShowMsg(client.RemoteEndPoint.ToString() + ":" + words);177 }179 catch (Exception ex)181 {183 ShowMsg(ex.Message);185 break;187 }189 }191 }195 void ShowMsg(string msg)197 {199 txtLog.AppendText(msg+"\r\n");201 }205 private void Form1_FormClosing(object sender, FormClosingEventArgs e)207 {209 //主窗体关闭时关闭子线程213 }215 //给客户端发送消息217 private void btnSend_Click(object sender, EventArgs e)219 {221 try223 {225 ShowMsg(txtMsg.Text);227 string ip = cboIpPort.Text;229 byte[] buffer = Encoding.UTF8.GetBytes(txtMsg.Text);231 dic[ip].Send(buffer);233 // client.Send(buffer);235 }237 catch (Exception ex)239 {241 ShowMsg(ex.Message);243 }247 }客户端代码: 1 Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 2 3 private void btnConnection_Click(object sender, EventArgs e) 7 //连接到的目标IP 9 IPAddress ip = IPAddress.Parse(txtIP.Text); 11 //IPAddress ip = IPAddress.Any; 13 //连接到目标IP的哪个应用(端口号!) 15 IPEndPoint point=new IPEndPoint(ip,int.Parse(txtPort.Text)); 17 try 19 { 21 //连接到服务器 23 client.Connect(point); 25 ShowMsg("连接成功"); 27 ShowMsg("服务器" + client.RemoteEndPoint.ToString()); 29 ShowMsg("客户端:" + client.LocalEndPoint.ToString()); 31 //连接成功后,就可以接收服务器发送的信息了 33 Thread th=new Thread(ReceiveMsg); 35 th.IsBackground = true; 37 th.Start(); 39 } 41 catch (Exception ex) 43 { 45 ShowMsg(ex.Message); 47 } 49 } 51 //接收服务器的消息 53 void ReceiveMsg() 55 { 57 while (true) 59 { 61 try 63 { 65 byte[] buffer = new byte[1024 * 1024]; 67 int n = client.Receive(buffer); 69 string s = Encoding.UTF8.GetString(buffer, 0, n); 71 ShowMsg(client.RemoteEndPoint.ToString() + ":" + s); 73 } 75 catch (Exception ex) 77 { 79 ShowMsg(ex.Message); 81 break; 83 } 85 } 89 } 93 void ShowMsg(string msg) 95 { 97 txtInfo.AppendText(msg+"\r\n"); 99 }103 private void btnSend_Click(object sender, EventArgs e)105 {107 //客户端给服务器发消息109 if (client!=null)111 {113 try115 {117 ShowMsg(txtMsg.Text);119 byte[] buffer = Encoding.UTF8.GetBytes(txtMsg.Text);121 client.Send(buffer);123 }125 catch (Exception ex)127 {129 ShowMsg(ex.Message);131 }133 }137 }141 private void ClientForm_Load(object sender, EventArgs e)143 {145 Control.CheckForIllegalCrossThreadCalls = false;147 } 好了,到这里我们对Socket的讨论就告一个段落了。
开,发之,Socket,网络编程,TCP,层次,模型,、,端