前段时间参与了一个项目,最近有空就来总结以下。时常总结才会进步,尤其是做技术,要不就会很容易陷入狗熊掰棒子的窘境。
我在项目中完成的模块是实现服务器主动向android手机端推送消息。老师的要求是用C语言在Linux下写一个服务器来实现服务器主动向android手机端推送消息。经过收集资料,最终发现一个韩国人写的开源项目Android Push Notification(简称Androinpn)可以实现此功能。androidpn是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端。官方网址是:http://sourceforge.net/projects/androidpn/。我用的版本是一个经过国人大神修改后的版本,里面有一些这个大神做的注释,更便于我们理解(再此表示对这位大神的感谢)。可以从这里下载到这个修改后的版本:推送.rar。下载后得到的是一个压缩包。解压后得到,其中Androidpn是服务器端程序,是一个 Java Web应用程序,androidpn-client是android程序。下面介绍下将这个开源项目运行起来的环境配置。
因为之前没做过java的项目,所以下面写的会小白一点。
首先是服务器端,服务器端是一个Java Web应用程序,首先要运行java程序就要装jdk。我装的jdk版本是,windows下安装只需要一路next就好了,只是要注意安装路径。安装完JDK后需要配置下环境变量,我的是win7系统配置过程如下:鼠标右击计算机----->属性---->高级系统设置(在左边栏)---->环境变量---->在系统环境变量中进行如下操作:1、新建->变量名:JAVA_HOME 变量值:D:\Program Files\Java\jdk1.6.0_10(这里就是你jdk的安装目录)。2、新建->变量名:CLASSPATH 变值:.;%JAVA_HOME%\lib
(注意最前面有个点)。3、编辑->变量名Path :在Path 变量值的最前面加上:%JAVA_HOME%\bin;
完成后使用文本编辑器(比如:edit.com/记事本/UltraEdit/EditPlus)编写如下代码,并保存为文件HelloWorld.java如下:
/* HelloWorld.java */
public class HelloWorld {
public static void main(String arg[]) {
System.out.println("Hello, World!");
}
}
开启一个DOS窗口,跳转到HelloWorld.java所在的目录中,执行以下操作,,如上则表明我们的jdk安装成功。
服务器端是一个java Web应用程序,要运行此程序我们需要在eclipse中安装apache-tomcat。安装步骤如下:
首先下载 对应 eclipse 版本的 tomcat 插件版本,(这里要注意: Tomcat 插件是Tomcat 插件,Tomcat 是 Tomcat, 两者不能混淆!)下载地址:http://www.eclipsetotale.com/tomcatPlugin.html。
然后将得到的压缩包解压,放入 eclipse 的 plugins 目录中重启 eclipse, Tomcat 插件安装成功!当然安装成功并不代表能使用,这里还要配置 Tomcat, 才能正常使用 Tomcat 插件。
配置过程:
首先下载当前 Eclipse 能使用的 Tomcat 版本,下载地址:http://tomcat.apache.org/(我用的是apache-tomcat-7.0.32)。然后解压到指定的目录,然后配置:Eclipse - toolsbar -> Window -> Prefences -> Tomcat -> 指向刚才 Tomcat 解压的目录,到此配置完成,下面截个图:
使用 Tomcat 插件可以启动、关闭 Tomcat。
因为服务器端的Web应用程序用到了mysql数据库,所以我们还得要装mysql数据库,我用的
mysql数据库版本是mysql-5.5.20-win32.exe。windows下的安装也是一路next,
这里需要注意的是别忘了安装过程中设置的root密码。
准备环境都搭好了以后,现在我们将服务器端程序Androidpn,import到eclipse中
(在eclipse左边的工程界面区右键---->import---->General---->Existing Projects into Workspace
---->Browse---->找到Androidpn位置---->finish)。导入完成后需要修改工程中的jdbc.properties文件,
将其中的jdbcUsername和jdbcPassword两项改为你本机的mysql的用户名和密码。
根据jdbc.properties配置文件中
可得我们要用到一个androidpn数据库,而刚装好的mysql中并没有这个数据库,
所以我们需要在mysql数据库中用:create database androidpn;这条命令来建立androidpn数据库。
一切都完成后我们运行Androidpn程序(右击工程区的Androidpn---->Run as---->Run on Server)。
运行成功后我们在浏览器地址栏中输入:http://localhost:8080/index.do可以看到Androidpn服务器端所对应的4
个页面:
初始这里应该是空的,上面那条记录是我之前连得。
服务器端运行成功后,会在我们刚创建的androidpn数据库中创建两张表:
其中apn_user存储用户的信息,当我们要向指定用户发送消息时就可以从这张表中通过查找用户名,来向指定的用户发送消息。apn_notification是存储发送消息内容的一张表。
服务器端运行起来了我们在来看客户端程序androidpn-client。androidpn-client是一个android程序,只需要将这个android程序导入到eclipse中然后在模拟器中运行即可。这里需要注意的是我们需要修改androidpn-client工程中的res/raw/androidpn.properties文件中的xmppHost这一项:
如果是要在模拟器中运行就将xmppHost这项修改为10.0.2.2:xmppHost=10.0.2.2。如果是要在真机上运行就将此项改为androidpn服务器端主机的地址。
启动androidpn-client后(右击工程区的androidpn-client---->Run as---->Android Application)模拟器的效果为:
现在就可以感受服务器端向android手机端推送消息了。
首先启动Androidpn服务器端,然后再启动客户端androidpn-client,这时在服务器端浏览器中的页面就会显示登录的客户端的信息:
到推送消息页面推送一条消息:
这时客户端模拟器接收到了消息,拉下上边栏即可看到:
我的任务是要用C语言在linux写一个服务器,然后就寻找解决方法。网上有前辈告诉我Webservise
这种技术可以实现我的需求,于是就开始学习Webservice技术。至于我对Webservice技术的学习放到下一篇再讲吧。