android服务端搭建
A. 废旧Android手机如何改造成linux服务器
搭建所谓的Linux的过程还是挺简单的,在很久之前我就玩过。不过如今年纪确实也不小了,没了当年那一股冲劲儿,这也属实是一个令人悲伤的事情。
书归正传,能问出这个问题,已经算得上是有一些计算机基础了。不过在这里我还是要明确一下一些 基本定义 ,以免大家后续看不懂。
什么是Linux服务器?所谓的搭建一个Linux服务器,我们可以将它理解成搭建一个自己的“网站”。 只不过,我们这种低端玩家只能将这个网站呈现在自己的局域网当中。
我们可以将废旧的安卓手机作为一个服务器来使用,在上面构建一些数据和网站。之后利用网络对其进行访问。 Linux的服务器具有安全、稳定的特点 ,非常适合于学生党用于服务器的基础学习。
如何实现Linux服务器的搭建?首先我们需要准备一台如问题所说的废旧安卓手机,这是你将来的服务器基准。不过要注意的是,这个废旧指的是你不用的手机,但是它得状态良好。
如果它连屏幕都打不开的话,那你就别想了。拿个尸体就想玩,哪有那么简单?如今想搭建个Linux服务器可比我们之前容易的多了,至少说不用再和我们之前一样敲代码了。如今的各路大神已经做好了软件,帮助我们实现自己的梦想。因此这个回答也许更像是一份 教程 ,一个基础的操作方法。
Linux需要的搭建软件其次,我们需要 busybox ,这可以 为改造完的Linux系统添加指令 ,处于一个类似于Bios的基础。
最后,我们需要 ConnectBot ,这是一个链接创建器, 可以为linuxdeploy构建基础的操作环境。
以上看不明白也没事,都是废话。你需要做的就是在安卓手机下载这些软件,安装好了便可。
Linux服务器搭建的操作流程所谓的Root,和当年苹果的越狱没什么过大的差别。
而Root之后,你将取得这部手机的所有权限,由此你便可以为所欲为。具体方法网上都有,非常的简单,再次无需赘述。
就和安装正常的安卓软件流程类似,非常简单。如果看到一大堆英文的话,就直接点OK就行了,方便快捷,绝不拖泥带水。
这个目录就是 BusyBox的安装路径 ,按默认的走就行。之后在设置完的菜单上点击安装,等待安装成功。至于说怎么安装,那不用烦劳你上心。
就记住, Start是开始,deploy是结束 就行。
随后启动Linux,点上边那个蓝色加号,自己配置自己的需求即可。
由此,手机端就彻底的改造完成了,而随后,我们就可以用Windows开始新一轮的改造。
Windows端的设置首先, 在Windows端安装SecureCRT这是一种类服务器搭建连接装置,目的是通过互联网连接服务器和电脑端。 随后将自己的废旧安卓连上网络,用SecureCRT去搜索其IP地址。
连接成功后, 在其中安装jdk ARM版 ,这一部的目的就是建立服务器的基本环境。
随后你就可以以此而随心所欲啦。虽然说这个服务器似乎也没什么太大的用处,不过总归能锻炼我们的动手能力。最重要的是,废旧的安卓也没什么用啊,为啥不再折腾折腾呢?
废旧手机使用termux把手机改造成服务器是最好的选择。
废旧手机可以装个termux软件,使用termux来进行编程开发甚至可以安装带有图形界面的linux电脑操作系统。
我们可以在酷安应用商店,开源的F-droid商店和一些安卓手机应用商店里下载安装和使用termux. termux可以算是安卓手机上最好用最强大的软件之一。
termux可以让你的安卓手机安装使用linux上的PC电脑版的软件,和安装使用c, c++, java, php, python, R, nodejs, rust,mysql 等几乎所有的编程语言,可以让你的安卓手机或安卓平板像电脑一样具有很高的生产力和做大量的编程开发工作。
termux还支持为手机上的ubuntu,debian,arch等linux操作系统安装图形界面让手机上使用具有图形界面的Linux电脑操作系统
如果只是当一个简单的web服务器使用,几乎不需要什么改造。
apache php mysql等有对应的手机安装包,直接安装就可以了。
B. Android app开发 搭建服务器
首先,先别用花生壳,我之前用过,会攻击电脑,ip被改的很奇怪。如果想让外网访问服务器的话,可以试试美步。
然后,服务器搭建服务器方法挺多的,我现在是用MyEclipse+sqlserver2008,服务器端写jdbc代码,生成json格式的数据,返回给客户端,客户端json解析得到数据显示在UI上。json格式说白了就是一组组的字符串。
关机问题:你的电脑如果搭建了服务器功能了,那你的那台电脑就已经是服务器了,服务器是一般是不会关机的,关机之后,客户端当然不能再访问服务器了。
全部是根据自己的理解手打,希望帮到你。
C. 如何给Android应用创建本地服务
本文通过代码向大家详细介绍和演示这两种的服务的创建过程,代码适用于Android2.3.3以后的版本。
1. 定义清单文件(AndroidManifest.xml)
4. 创建服务启动界面(LocalServiceActivities.java)
package my.android.test;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
* 该类中包含两种类型服务的客户端:
* 启动类型服务客户端:Controller
* 绑定类型服务客户端:Binding
*/
publicclass LocalServiceActivities {
/**
* Controller类是启动类型服务的客户端,它包含两个按钮:
* start:点击该按钮时,启动服务。
* stop: 点击该按钮时,终止服务。
*/
publicstaticclass Controller extends Activity{
/**
* Activity被首次启动时,调用该方法。
*/
@Override
protectedvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//填充布局
setContentView(R.layout.local_service_controller);
//查找布局中的启动服务按钮,并设置点击事件监听器。
Button button = (Button)findViewById(R.id.start);
button.setOnClickListener(mStartListener);
//查找布局中的终止服务按钮,并设置点击事件监听器。
button = (Button)findViewById(R.id.stop);
button.setOnClickListener(mStopListener);
}
/**
* start按钮的点击事件监听器实现。
*/
private OnClickListener mStartListener = new OnClickListener(){
publicvoid onClick(View v){
//启动LocalService服务。
startService(new Intent(Controller.this, LocalService.class));
}
};
/**
* stop按钮的点击事件监听器实现。
*/
private OnClickListener mStopListener = new OnClickListener(){
publicvoid onClick(View v){
//终止LocalService服务。
stopService(new Intent(Controller.this, LocalService.class));
}
};
}
/***************************************************************
*以下是绑定型服务客户端的实现
***************************************************************/
/**
* Binding类是绑定类型服务的客户端,它包含两个按钮:
* bind:点击该按钮时,调用bindService()方法绑定并启动服务;
* unbind:点击该按钮时,调用unbindService()方法解除绑定并终止服务。
*/
publicstaticclass Binding extends Activity{
//用于保存服务的绑定状态,true:绑定,false:未绑定
privatebooleanmIsBound;
//用于保存被绑定的本地服务实例。
private LocalService mBoundService;
/**
* 实现监视被绑定服务状态的接口:ServiceConnection
* 绑定类型服务都要实现这个接口,以便监视服务的状态,这个接口中的方法会在
* 应用的主线程中被调用。
*/
private ServiceConnection mConnection = new ServiceConnection(){
/**
* 当连接的服务被创建时,Android系统会调用这个方法,用IBinder对象跟服务建立通信通道。
* @param className:被连接的具体的服务组件的名称
* @param service:服务的通信通道IBinder对象。
*/
publicvoid onServiceConnected(ComponentName className, IBinder service){
//从IBinder对象中获取服务实例。
mBoundService = ((LocalService.LocalBinder)service).getService();
//显示Activity已经与服务建立了连接的提示消息。
Toast.makeText(Binding.this, R.string.local_service_connected, Toast.LENGTH_SHORT).show();
}
/**
* 当服务被终止时,Android系统会调用这个方法。
*/
publicvoid onServiceDisconnected(ComponentName className){
//清除客户端服务实例
mBoundService = null;
//显示服务被终止的提示消息。
Toast.makeText(Binding.this, R.string.local_service_disconnected, Toast.LENGTH_SHORT).show();
}
};
/**
* 绑定并启动服务,bind按钮点击时会调用这个方法。
*/
void doBindService(){
//绑定并启动服务。
bindService(new Intent(Binding.this, LocalService.class), mConnection, Context.BIND_AUTO_CREATE);
mIsBound = true;
}
/**
* 解除与服务的绑定,unbind按钮被点击时会调用这个方法
*/
void doUnbindService(){
//如果服务被绑定,则解除与服务绑定。
if(mIsBound){
unbindService(mConnection);
mIsBound = false;
}
}
/**
* 当Activity被销毁时,调用解除绑定服务的方法,解除被绑定的服务。
*/
@Override
protectedvoid onDestroy(){
super.onDestroy();
//解除被绑定的服务。
doUnbindService();
}
/**
* bind按钮的点击事件监听器接口实现。
*/
private OnClickListener mBindListener = new OnClickListener(){
publicvoid onClick(View v){
//绑定并启动服务。
doBindService();
}
};
/**
* unbind按钮的点击事件监听器接口实现。
*/
private OnClickListener mUnbindListener = new OnClickListener(){
publicvoid onClick(View v){
//解除被绑定的服务。
doUnbindService();
}
};
/**
* Activity被首次启动时,会调用这个方法。
*/
@Override
protectedvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//填充Activity
setContentView(R.layout.local_service_binding);
//查找布局中的bind按钮,并设置点击事件的监听器
Button button = (Button)findViewById(R.id.bind);
button.setOnClickListener(mBindListener);
//查找布局中的unbind按钮,并设置点击事件的监听器
button = (Button)findViewById(R.id.unbind);
button.setOnClickListener(mUnbindListener);
}
}
}
5. 创建服务(LocalService.java)
package my.android.test;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.util.Log;
import android.widget.Toast;
/**
* LocalService基础Android的Service类,实现应用的本地服务组件。
* 该服务使用HandlerThread类创建了服务自己的线程和消息循环,
* 因此,不会因为服务中的长时处理,而阻塞界面的刷新,影响用户体验。
*/
publicclass LocalService extends Service {
//用于保存本服务自己的消息循环对象Looper
private Looper mServiceLooper;
//用于保存内部类ServiceHandler的对象实例,它继承了Android的Handler类,
//用于处理发送给服务的消息。
private ServiceHandler mServiceHandler;
/**
* 这个类用于给客户端提供绑定对象,因为本示例的服务与客户端运行在同一个
* 主进程中,所以不需要处理进程间通信(IPC)
*/
publicclass LocalBinder extends Binder{
LocalService getService(){
//返回本服务的实例。
return LocalService.this;
}
}
/**
* 服务被首次创建时,系统调用这个方法。
* Android服务组件必须覆写这个方法
*/
@Override
publicvoid onCreate(){
//创建线程对象,并启动线程。
HandlerThread thread = new HandlerThread("ServiceStartArguments", Process.THREAD_PRIORITY_BACKGROUND);
thread.start();
//获取线程的消息循环对象
mServiceLooper = thread.getLooper();
//用线程的消息循环对象创建消息处理对象。
mServiceHandler = new ServiceHandler(mServiceLooper);
}
/**
* 启动类型服务必须实现这个方法,客户端每次调用startService()方法时,
* 系统都会调用这个方法。
* @param intent:它是传递给startService()方法的Intent对象。
* @param flags:有关启动请求的附加数据,可以是:0、START_FLAG_REDELIVERY或START_FLAG_RETRY.
* @param startId:一个唯一的整数,代表一次具体的请求,用于stopSelfResult(int)方法。
*/
@Override
publicint onStartCommand(Intent intent, int flags, int startId){
Log.i("LocalService", "Received star id" + startId + ":" + intent);
//显示服务启动的提示信息
Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
//获取要传递给服务消息循环的Message对象。
Message msg = mServiceHandler.obtainMessage();
//初始化Message对象的成员变量。
msg.arg1 = startId;
msg.obj = "Message processing......" + startId;
//把消息发送给服务线程的消息循环。
mServiceHandler.sendMessage(msg);
returnSTART_STICKY;
}
/**
* 必须覆写这个方法,服务被终止时要调用这个方法,清理服务所占用的资源。
*/
@Override
publicvoid onDestroy(){
//退出服务线程的消息循环。
mServiceLooper.quit();
//显示服务被退出的提示信息。
Toast.makeText(this, R.string.local_service_stopped, Toast.LENGTH_SHORT).show();
}
/**
* 绑定型服务必须覆写这个方法,启动型服务也可覆写这个方法,只要返回null即可。
*/
@Override
public IBinder onBind(Intent intent){
//返回本服务对象实例。
returnmBinder;
}
privatefinal IBinder mBinder = new LocalBinder();
/**
* 该类继承Android的Handler类,为线程的消息循环提供发送和处理消息的功能,
* 本示例覆写了handleMessage()方法,用来处理发送给服务消息循环的消息。
*/
privatefinalclass ServiceHandler extends Handler{
//类实例化时,需要传入服务线程的消息循环对象
public ServiceHandler(Looper looper){
super(looper);
}
/**
* 覆写Handler类的handleMessage()方法,当服务线程的消息循环接收到外部
* 发送的消息时,会调用这个方法来处理对应的消息,本示例只是简单的向用户提示消息被处理的信息。
*/
@Override
publicvoid handleMessage(Message msg){
long endTime = System.currentTimeMillis() + 5 * 1000;
while (System.currentTimeMillis() < endTime){
synchronized(this){
try{
wait(endTime - System.currentTimeMillis());
CharSequence cs = msg.obj.toString();
Toast.makeText(LocalService.this, cs, Toast.LENGTH_SHORT).show();
//showNotification();
}catch(Exception e){
//
}
}
}
//消息被处理之后,终止本服务。
LocalService.this.stopSelf();
}
}
}
D. 如何在 android 本地搭建一个 http 服务器
这一阵感觉玩手机玩腻了,VPS也玩腻了,瞬间感觉啥都玩腻了。前几天闲着无聊,看到了手机上的超级终端,心想:安卓底层不也是Linux么?于是就用超级终端wget了一个文件,成功了!吼吼,于是下一个想法就是能不能在手机上搭建一个WEB环境??? 想到就开始各种搜,发现安卓使用的Linux并不属于任何发行版本,看来使用传统的建站方式不行了。继续搜索,发现谷歌商店里有一个集成lighttpd+php+mysql+phpmyadmin环境的APK,哈哈,这下好了。当然,如果只装上这个APK只能在本地测试,无法使用公网访问,所以,经过我各种搜,终于有了这一篇文章,毫不客气的说,这绝对是全网首发,至少不用让你再像我一样各种搜了。 现在的手机硬件已经很强大了,¥1999就能买到4核1.5G,2G内存的手机,这几乎能满足像我这样的小站的需求了。硬件有了,集成环境的APK也有了,就剩下公网访问了。 第一:需要一部安卓手机,至少600MHZ的CPU,256内存,手机需要ROOT,没有ROOT的话,不能使用80端口。 第二:下载我提供的集成环境的APK文件(这里)解压密码:,KSWEB在谷歌商店里是收费的,免费试用5天,我提供的这个文件为网友破解版,免费试用55年,够你折腾了。 第三:需要一个支持路由功能的路由器,以及一个花生壳账号。 1.首先在手机上安装APK,(如果手机里有什么防火墙之类的,请关闭,否则不能使用WIFI地址访问),然后点开KSWEB,首次开启,会解压缩文件,然后会提示重启,重启后,就能够看到mysql启动和相应信息了。 2.点options进入设置,然后勾选上root权限,这样就可以更改端口为80了。然后回到主界面,点phpmyadmin然后就会自动下载了。下载成功后,可以在手机浏览器里输入127.0.0.1,就可以看到相关信息。虽然版本有些老,但是相当简便啊亲…… 如果你只想在手机上测试,那么到这里就结束了。如果想让公网访问手机, 那么就需要使用DDNS(动态域名解析)来支持。 3.使用oray护照,登录花生壳,系统会自动分配给你一个免费域名,用这个域名来访问手机。登录你的路由器,点击“转发规则”,选择“虚拟服务器”,端口填写80,IP地址填写你手机WIFI的IP地址,保存,如图所示。 4.保存后,点击“动态DNS设置”,账号密码就是你oray的通行证,点登录,如果成功了,就会自动识别你的免费域名。如图所示,然后保存就行了。 这样的话,直接输入域名就可以访问到手机了,只要你的路由器不关闭,就可以一直使用了。下面是我的演示: 至此,你的手机就可以当成一个独立的VPS来使用了,建议使用闲置的手机来玩,它有以下几个好处:装13,够折腾,省电省资源,废物利用,数据更安全,便携,国内速度一流……还有,查域名的时候貌似是独立IP,这样网络会不会喜欢呢?
E. 怎样搭建一个android开发框架
搭建Android开发环境
准备工作:下载Eclipse、JDK、Android SDK、ADT插件
下载地址:Eclipse:http://www.eclipse.org/downloads/
JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk7u9-downloads-1859576.html
Android SDK:http://developer.android.com/sdk/index.html
ADT:http://developer.android.com/tools/sdk/eclipse-adt.html
1、安装和配置JAVA开发环境:
①把准备好的Eclipse和JDK安装到本机上(最好安装在全英文路径下),并给JDK配置环境变量,其中JDK的变量值为JDK安装路径的根目录,如我的为:D:\Program Files\Java\jdk1.7.0_02;
②打开命令提示符(cmd),输入java -version命令,显示如下图则说明JAVA环境变量已经配置好了。
2、安装ADT插件:
①打开已安装好的Eclipse,选择菜单栏上的“Help”->在弹出的下拉框中单击选择“Install new software...”;
②在新打开的对话框中我们完全可以直接在"Work with"中输入:https://dl-ssl.google.com/android/eclipse/在线安装ADT插件,但由于Google的服务器搭建在国外,所以通过这种方式安装起来会比较慢,而且可能会出现人品差死活装不上的情况,所以不推荐在线安装。
③我推荐直接通过下载好的ADT插件压缩包进行安装(此种方式可以在离线环境下进行)。具体步骤是:在新打开的对话框中点击“Add”按钮->在打开的对话框中点击“Archive”按钮选择之前已经下载好保存在本地硬盘的ADT插件压缩包,至于上面的“Name”可以随便取,这只是一个代号而已,没什么实际作用。
④在上一步中点击“Ok”按钮后我们会发现中间的空白处出现了两行复选框,单击"Select All"按钮选中所有的复选框,这步过后一路“Next”,需要“Accept”的就选中“Accept”,直到点击“Finish”结束,这样ADT插件就安装好了。整个过程需要的时间视机器性能而定。安装好ADT插件后,Eclipse的工具栏会出现一排Android的图标,如下图:
3、安装SDK:
①把下载好的Android SDK安装到本机上(最好安装在全英文路径下),并为Android SDK配置环境变量。Android SDK的环境变量值为SDK安装目录下的platform-tools文件夹和tools文件夹子目录路径,如我的分别为:E:\My Studying\Android\android-sdk\platform-tools、E:\My Studying\Android\android-sdk\tools,在变量值中,两个路径用逗号隔开。
②打开命令提示符(cmd),分别输入android -h和adb命令,显示如下图则说明Android SDK环境变量已经配置好了。
③打开Android SDK的安装目录,双击 "SDK Manager"->在打开的窗口中先选择你需要安装的SDK版本,其中“Status”表示该SDK包是否安装,如我选的是“Android2.2(API 8)”(我的之前已经安装过了,所以“Status”为“Installed”)->再点击“Install packages...”按钮,在弹出来的窗口中最好选“Accept All”这样才能安装你刚才选的所有的包->最后点“Install”按钮就开始安装了,整个过程会很慢,这需要你的耐心。
另外我们还可以通过在Eclipse上的工具栏中点击下图指示的图标打开“SDK Manager”然后进行安装,这样和上面的SDK安装方式一样,就不累述了。
④最后再选择Eclipes主菜单上的"Windows"->选择"preferrnces";
⑤在弹出来的对话框中选中左边栏的“Android”->通过右侧的“Browse...”按钮选择SDK的安装路径根目录->点击最下方的“Ok”按钮,这样SDK就在Eclipse上加载成功了。
4、创建Android模拟器(AVD):
①打开Eclipse->在Eclipse的工具栏上单击下图指示的图标打开“Android Virsual Device Manager”窗口;
②在“Android Virsual Device Manager”窗口单击“New”按钮->在弹出来的窗口中"Name"可以随便取;“Target”指模拟器的系统版本;“SD Card”的"size"是指手机存储卡的大小,只要你不在模拟器上装太多的应用,一般给个二三十MB就够了;“Skin”是指屏幕的分辨率大小,其中“Built in”是一般手机常用标准屏幕分辨率大小,而“Resolution”是自定义屏幕分辨率大小,具体做法,可以根据自身情况选择。->一切设置好后点击“Create AVD”,这时一个模拟器就创建好了。如果有必要,我们可以创建多个模拟器用于测试时使用。
附:Android模拟器型号以及其对应的分辨率大小:
Standard Width Height DAR Pixeis
HVGA 480 * 320 3:2 153,600
QVGA 320 * 240 4:3 76,800
WQVGA400 400 * 240 5:3 96,000
WQVGA432 432 * 240 9:5 103,680
WVGA800 800 * 480 5:3 384,000
WVGA852 854 * 480 409,920
至此为止,在Eclipse上就已经成功搭建Android开发环境了。
F. 怎样搭建一个android开发框架
相对于传统计算机程序语言来说,Android开发学习资源上还稍微欠缺一些,对于一些基础应用讲解还稍显匮乏,本篇所讲述的Android培训内容可以帮助大家更好的理解Android项目快速开发框架。结合之前所用的ormlite和hessian,再加上SAE已经支持JAVA,把服务端切换到JAVA,也就有了本文。使用hessian来做数据传输,ormlite来实现客户端与服务端的数据存储,极大的减少了CRUD工作。本文为探索贴,未正式用于大型项目,欢迎大家讨论使用!正文一、简介1.1 ormliteOrmlite[Object Relational Mapping Lite (ORM Lite)]对象关系映射精简版(精简版的ORM)提供了一些简单的,轻量级持久化Java对象到SQL数据库,同时也避免了复杂性和更多的标准的ORM包的开销的功能。支持数据库的jdbc调用,当然,最重要的肯定是它支持android原生的数据库api调用sqlite。——转载自这里。1.2 hessian使用方法参照本博两篇文章:[hessdroid]Android下使用Hessian与Java服务端通讯[hessdroid]Android下使用Hessian与Java服务端通讯的传值测试1.3 Android快速开发框架说明考虑如下几个特点:a). 客户端(Android)和服务端均使用Java语言b). 客户端(Android)和服务端均支持Hessian和ormlite框架c). 完整的支持面向对象开发:存储和交互传输二、准备2.1 开发环境为了便于同时开发Android和Java Web,这里下载的是Eclipse IDE for Java EE Developers版本,然后安装最新的ADT插件和TOMCAT插件。2.2 服务端应用服务器使用Tomcat,采用Java(JSP/Servlet)来实现服务端的业务逻辑,数据库使用Mysql。快速框架搭建推荐大家使用XAMPP(集成Apache、MySQL、PHP等,支持绿色安装)。2.3 客户端普通的Android环境2.4 通信与存储说明服务端与客户端通过Hessian进行数据交换,通过Ormlite保存数据库(通过JDBC保存到服务端的MYSQL数据库,也可以直接保存到客户端的sqlite数据库);三、代码3.1 项目工程截图(服务端)HOLib共用于客户端和服务端,保证接口和数据对象一致性。3.2 重点代码分析3.2.1 服务端web.xml<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>user</servlet-name> <servlet-class>com.nmbb.ho.server.servlet.UserServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>user</servlet-name> <url-pattern>/user.do</url-pattern> </servlet-mapping> <listener> <listener-class>com.nmbb.ho.server.StartupInit</listener-class> </listener></web-app>StartupInit.javapublic class StartupInit implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent arg0) { try { TableUtils.dropTable(OrmliteHelper.getConnection(), POUser.class, true); //创建数据库 TableUtils.createTable(OrmliteHelper.getConnection(), POUser.class); } catch (SQLException e) { e.printStackTrace(); } } @Override public void contextDestroyed(ServletContextEvent arg0) { }} 代码说明:StartupInit可用于创建数据库表结构,这里用于测试,真实环境注意数据丢失问题。POUser.java@DatabaseTable(tableName = "nmbb_users")public class POUser implements Serializable { /** 用户编号,6位数字 */ @DatabaseField(generatedId = true) public int suid; /** 用户名 */ @DatabaseField(width = 30) public String username; /** 密码 */ @DatabaseField(width = 30) public String password; /** 昵称 */ @DatabaseField(width = 60) public String nickname; /** 200 正常 201 数据校验错误 202用户已经存在 */ public int status = 200; /** 用于放错误信息 */ public String msg; public POUser() { }} 代码说明:注意需要一个空的构造函数,其他请参考ormlite资料。UserServlet.java/*** 用户Servlet** @author 农民伯伯* @see http://www.cnblogs.com/over140/archive/2013/02/19/2917231.html**/public class UserServlet extends HessianServlet implements IUserService { @Override public POUser register(String username, String password) { POUser result = new POUser(); System.out.println("[UserServlet.register]..."); // 检测数据是否合法 if (isEmpty(username) || isEmpty(password)) { result.status = 201; result.msg = "用户名或密码不能为空"; } else { // 检测用户是否存在 OrmliteHelper<POUser> db = new OrmliteHelper<POUser>(); if (db.exist(POUser.class, "username", username)) { result.status = 202; result.msg = "用户名已经存在"; } else { result.username = username; result.password = password; db.create(result);// 入库 result.msg = "注册成功"; System.out.println("create user suid:" + result.suid); } } return result; } @Override public List<POUser> query(int suid, int startIndex, int pageSize) { return new OrmliteHelper<POUser>().query(POUser.class, "suid", suid, startIndex, pageSize) ; } /** * 判断字符串是否为空 * * @param str * @return */ public static boolean isEmpty(String str) { return str == null || str.length() == 0; }}3.2.2 客户端(Android) public class UserActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void OnClickRegiger(View view) { new AsyncTask<Void, Void, POUser>() { @Override protected POUser doInBackground(Void... params) { String url = "http://192.168.68.23:8081/HOServer/user.do"; HessianProxyFactory factory = new HessianProxyFactory(); try { factory.setDebug(true); factory.setReadTimeout(5000); //不设置会报 expected hessian reply at 0x48 factory.setHessian2Reply(false); IUserService basic = (IUserService) factory.create(IUserService.class, url, getClassLoader()); return basic.register("admin", "123456"); } catch (MalformedURLException e) { Log.e("UserActivity", "OnClickRegiger", e); } catch (Exception e) { Log.e("UserActivity", "OnClickRegiger", e); } return null; } @Override protected void onPostExecute(POUser result) { if (result != null) { if (result.status == 200) { //保存入库 new DbHelper<POUser>().create(result); } Toast.makeText(UserActivity.this, "" + result.msg, Toast.LENGTH_LONG).show(); } }; }.execute(); }}代码说明:1、DbHelper在源码里给出。2、如果项目无法编译通过,请注意设置项目的字符编码、JDK版本、Android的版本。三、总结5.1 优点a). 完全面向对象开发b). 降低项目的复杂度,减少引入其他框架所带来的复杂性c). 非常适合一个开发服务端和客户端充分的利用的框架的特点,提交开发效率,适合中小型项目快速开发。5.2 缺点a). 注意服务端与客户端共用id的问题5.3 其他a). ormlite支持标准的JPA助记符,这里。这样服务端采用Hibernate应该也是可以的,有时间可以做一个整合例子看看。学习语言同做事情一样,想通其中的关系,就会事半功倍,对语言要深入的理解,
G. 我在做一个android客户端,自己写服务端,由于服务端的经验不多,所以请教各位,帮帮忙!
首先,android客户端与服务器端的通信用socket和http通信都是可以实现的,主要看你的需求是什么,如果需要实时通信,那么选用socket。否则选用http通信。因为socket会建立通信管道。耗费资源过大。
其次,没太明白你说得处理并发量的目标5000是什么意思。不知道是不是可以理解为你要同时与服务器进行多方数据交互。如果是建议你使用socket通信。并且可以将你得客户端并发处理用异步任务的方式处理(当然多线程也可以,因为异步任务本身就是多线程)。android客户端的耗时操作都不要放在UI线程里处理,因为这样会出现5秒响应机制导致你得程序崩溃。
不知道上面的回答有没有帮到你,如果有,希望多给追加点分数,10分除了我估计没人愿意帮你写这么多字回答的
H. Android上实现TCP服务端
之前已经讲过了tcp客户端的实现了,大家有兴趣的话,可以参看文章
Android上实现TCP客户端
那么,今天我们就来讲讲tcp之服务端的封装吧。我已经将tcp服务端封装成了一个类—TcpServer,下面就来讲讲它的使用吧。
今天涉及内容:
先来波效果图
在 tcp服务端 建立 ServerSocket 的时候,我们通常是这样的:
其实以上方法调用的是
其中涉及到的参数:
鉴于tcp服务端 ServerSocket 一般运行在 "本机" 上,则快速初始化 ServerSocket 运用上面的方法:
意思是建立的ServerSocket IP地址为本机,可容纳socket个数为 50 。
在理解了 ServerSocket 初始化问题后,让我们来看看封装类TcpServer的几个主要方法:
TcpServer 主要是在 java 上运行,所以就让我们在 Androidstudio 上模拟下在 Java 中运行tcp服务端的场景:
这里涉及到的两个类 SocketConfig 和 SocketHelper 和之前的一样,大家可以参考文章 Android上实现TCP客户端 中与之相关的介绍,这里就不赘述了。
tcp服务端主要容易出现以下两个问题:
对于第一个问题,这里需要强调的是 TcpServer 的接收方法 receiveMessage(String charsetName) 是以 (result = bufferedReader.readLine()) != null 做判断读取 stream 的,所以客户端向 TcpServer 发送消息时,需要在结尾加上\n,这样 TcpServer 的receiveMessage(String charsetName)方法才能将传过来的数据接收完整。
对于第二个问题,则需要客户端与服务端设置相同的字符集以保证数据不乱码。
封装类 TcpServer 源码如下:
I. android 上可以安装 tomcat 吗也就是说用android搭建一个服务器,要怎样操作呢
web后台搭建服务器,android通过调用后台给的接口,实现android客户端对服务器的各项交互操作,请采纳