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客戶端對伺服器的各項交互操作,請採納