安卓伺服器源碼
① 在Android端使用socket傳輸圖片到java伺服器,求源代碼
/**
*思想:
1.直接將所有數據安裝位元組數組發送
2.對象序列化方式
*/
/**
*thread方式
*
*@authorAdministrator
*/
{
privatestaticfinalintFINISH=0;
privateButtonsend=null;
privateTextViewinfo=null;
privateHandlermyHandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
switch(msg.what){
caseFINISH:
Stringresult=msg.obj.toString();//取出數據
if("true".equals(result)){
TestSocketActivity4.this.info.setText("操作成功!");
}else{
TestSocketActivity4.this.info.setText("操作失敗!");
}
break;
}
}
};
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_test_sokect_activity4);
//StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder()
//.detectDiskReads().detectDiskWrites().detectNetwork()
//.penaltyLog().build());
//StrictMode.setVmPolicy(newStrictMode.VmPolicy.Builder()
//.detectLeakedSqlLiteObjects().detectLeakedClosableObjects()
//.penaltyLog().penaltyDeath().build());
this.send=(Button)super.findViewById(R.id.send);
this.info=(TextView)super.findViewById(R.id.info);
this.send.setOnClickListener(newSendOnClickListener());
}
{
@Override
publicvoidonClick(Viewv){
try{
newThread(newRunnable(){
@Override
publicvoidrun(){
try{
//1:
Socketclient=newSocket("192.168.1.165",9898);
//2:
ObjectOutputStreamoos=newObjectOutputStream(
client.getOutputStream());
//3:
UploadFilemyFile=SendOnClickListener.this
.getUploadFile();
//4:
oos.writeObject(myFile);//寫文件對象
//oos.writeObject(null);//避免EOFException
oos.close();
BufferedReaderbuf=newBufferedReader(
newInputStreamReader(client
.getInputStream()));//讀取返回的數據
Stringstr=buf.readLine();//讀取數據
Messagemsg=TestSocketActivity4.this.myHandler
.obtainMessage(FINISH,str);
TestSocketActivity4.this.myHandler.sendMessage(msg);
buf.close();
client.close();
}catch(Exceptione){
Log.i("UploadFile",e.getMessage());
}
}
}).start();
}catch(Exceptione){
e.printStackTrace();
}
}
()throwsException{//包裝了傳送數據
UploadFilemyFile=newUploadFile();
myFile.setTitle("tangcco安卓之Socket的通信");//設置標題
myFile.setMimeType("image/png");//圖片的類型
Filefile=newFile(Environment.getExternalStorageDirectory()
.toString()
+File.separator
+"Pictures"
+File.separator
+"b.png");
InputStreaminput=null;
try{
input=newFileInputStream(file);//從文件中讀取
ByteArrayOutputStreambos=newByteArrayOutputStream();
bytedata[]=newbyte[1024];
intlen=0;
while((len=input.read(data))!=-1){
bos.write(data,0,len);
}
myFile.setContentData(bos.toByteArray());
myFile.setContentLength(file.length());
myFile.setExt("png");
}catch(Exceptione){
throwe;
}finally{
input.close();
}
returnmyFile;
}
}
}{
privateStringtitle;
privatebyte[]contentData;
privateStringmimeType;
privatelongcontentLength;
privateStringext;
publicStringgetTitle(){
returntitle;
}
publicvoidsetTitle(Stringtitle){
this.title=title;
}
publicbyte[]getContentData(){
returncontentData;
}
publicvoidsetContentData(byte[]contentData){
this.contentData=contentData;
}
publicStringgetMimeType(){
returnmimeType;
}
publicvoidsetMimeType(StringmimeType){
this.mimeType=mimeType;
}
publiclonggetContentLength(){
returncontentLength;
}
publicvoidsetContentLength(longcontentLength){
this.contentLength=contentLength;
}
publicStringgetExt(){
returnext;
}
publicvoidsetExt(Stringext){
this.ext=ext;
}
}
下邊是服務端
publicclassMain4{
publicstaticvoidmain(String[]args)throwsException{
ServerSocketserver=newServerSocket(9898);//伺服器端埠
System.out.println("服務啟動........................");
booleanflag=true;//定義標記,可以一直死循環
while(flag){//通過標記判斷循環
newThread(newServerThreadUtil(server.accept())).start();//啟動線程
}
server.close();//關閉伺服器
}
}
{
="D:"+File.separator+"myfile"
+File.separator;//目錄路徑
privateSocketclient=null;
privateUploadFileupload=null;
publicServerThreadUtil(Socketclient){
this.client=client;
System.out.println("新的客戶端連接...");
}
@Override
publicvoidrun(){
try{
ObjectInputStreamois=newObjectInputStream(
client.getInputStream());//反序列化
this.upload=(UploadFile)ois.readObject();//讀取對象//UploadFile需要和客戶端傳遞過來的包名類名相同,如果不同則會報異常
System.out.println("文件標題:"+this.upload.getTitle());
System.out.println("文件類型:"+this.upload.getMimeType());
System.out.println("文件大小:"+this.upload.getContentLength());
PrintStreamout=newPrintStream(this.client.getOutputStream());//BufferedWriter
out.print(this.saveFile());//返回響應
// BufferedWriterwriter=null;
// writer.write("");
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
this.client.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
privatebooleansaveFile()throwsException{//負責文件內容的保存
/**
*java.util.UUID.randomUUID():
*UUID.randomUUID().toString()是javaJDK提供的一個自動生成主鍵的方法。UUID(Universally
*UniqueIdentifier)全局唯一標識符,是指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的,
*是由一個十六位的數字組成
*,表現出來的形式。由以下幾部分的組合:當前日期和時間(UUID的第一個部分與時間有關,如果你在生成一個UUID之後,
*過幾秒又生成一個UUID,
*則第一個部分不同,其餘相同),時鍾序列,全局唯一的IEEE機器識別號(如果有網卡,從網卡獲得,沒有網卡以其他方式獲得
*),UUID的唯一缺陷在於生成的結果串會比較長,字元串長度為36。
*
*UUID.randomUUID().toString()是javaJDK提供的一個自動生成主鍵的方法。UUID(Universally
*UniqueIdentifier)全局唯一標識符,是指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的,
*是由一個十六位的數字組成,表現出來的形式
*/
Filefile=newFile(DIRPATH+UUID.randomUUID()+"."
+this.upload.getExt());
if(!file.getParentFile().exists()){
file.getParentFile().mkdir();
}
OutputStreamoutput=null;
try{
output=newFileOutputStream(file);
output.write(this.upload.getContentData());
returntrue;
}catch(Exceptione){
throwe;
}finally{
output.close();
}
}
}{
privateStringtitle;
privatebyte[]contentData;
privateStringmimeType;
privatelongcontentLength;
privateStringext;
publicStringgetTitle(){
returntitle;
}
publicvoidsetTitle(Stringtitle){
this.title=title;
}
publicbyte[]getContentData(){
returncontentData;
}
publicvoidsetContentData(byte[]contentData){
this.contentData=contentData;
}
publicStringgetMimeType(){
returnmimeType;
}
publicvoidsetMimeType(StringmimeType){
this.mimeType=mimeType;
}
publiclonggetContentLength(){
returncontentLength;
}
publicvoidsetContentLength(longcontentLength){
this.contentLength=contentLength;
}
publicStringgetExt(){
returnext;
}
publicvoidsetExt(Stringext){
this.ext=ext;
}
}
② 誰有Android系統的源碼
1、通過 ubuntu 軟體中心安裝 wine;
2、通過 ubuntu 軟體中心安裝 winetricks;
3、通過 winetricks 在 shell中輸入: winetricks mfc42
1、通過 wine windows 的方式啟動代理伺服器
2、設置瀏覽器代理伺服器
3、設置shell代理伺服器:
在shell中輸入 sudo gedit /etc/bash.bashrc
在文件 /etc/bash.bashrc 中添加:如下內容
export http_proxy=http://127.0.0.1:8580/export https_proxy=http://127.0.0.1:8580/
通過shell安裝如下的組件:
1、sudo apt-get install bison g++-multilib git gperf libxml2-utils
2、新建一個存放源碼的目錄,如:mkdir ~/andorid/source
3、在源碼目錄中輸入命令:repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
其中: android-4.0.1_r1是android源碼的版本,更多的版本可以通過下面的方式查詢:http://source.android.com/source/build-numbers.html
4、修改source/.repo/manifest/default.xml 文件中的 fetch 的值為:
git://Android.git.linaro.org/
通過如下的指令來設置郵箱和用戶名
git config --global user.name "<your name>" ----修改用戶名git config --global user.email "<your email>" ----修改email
5、在source目錄下輸入指令:repo sync
便開始了代碼的下載
③ 如何調試跟蹤Android Framework源代碼
本文講解如何在Eclipse中導入Android源代碼(包括Framework和Application的代碼),然後通過模擬器或真機跟蹤/調試Android的Java代碼,區別於一般基於Android SDK的純應用開發,這里可以跟蹤/調試Framework中的代碼。
一、准備工作
確保機器上已經安裝並配置下列軟體環境:JDK/ Eclipse / Android SDK / ADT
即,機器上已經安裝了Eclipse下Android應用開發所需的環境。如果還未配置,移步《搭建Windows下Android應用開發環境——Eclipse/Android/ADT》。
另外,為了跟蹤調試Android源碼,你還需要有Android源碼,並有源碼的編譯環境,可以是:
虛擬機環境 虛擬機中安裝Linux,Linux下編譯Android源碼。此環境下,如果要在宿主機的Eclipse中調試,還需要把Android的源碼路徑共享出來,宿主機可訪問到;
有單獨的可編譯Android的網路環境 在你的客戶端的機器上訪問伺服器共享出來的Android的源碼路徑;
Linux環境下直接通過Eclipse跟蹤調試本機上的Android源碼。
-Xms40m
-Xmx384m
-Xms128m
-Xmx512m
注意:不管哪種工作方式,Android源碼要都是已經編譯過的,且編譯時採用的是Eng模式(vs User mode)。編譯Android Platform和Kernel的過程,可參考《Ubuntu10.10下編譯Android2.2平台》及《Ubuntu10.10下編譯Android2.2內核》。
二、基本設置
准備工作完畢之後,現在做一些基本的設置。
1. 把Android源碼路徑<Android_ROOT>下的developmentideeclipse中的.classpath文件復制到<Android_ROOT>下;如果需要在模擬器中進行調試的話,需要復制三個img(具體方法見http://wenku..com/view/26d9063c87c24028915fc366.html)
2. 修改Eclipse的設置
修改eclipse.ini文件,更改下列內容:
[plain]view plain
改為:
[java]view plain
這里增大最小Java堆大小到128MB,增大最大Java堆大小到512MB。
三、Eclipse中創建工程
1. File > New > Java Project
④ 哪裡可以找到帶伺服器端的安卓項目源碼
Android平台的即時通訊軟體實現,使用Socket進行通訊,利用PC作為伺服器作為消息轉發的平台,若好友在線,伺服器則直接將消息轉發給好友;若好友離線,伺服器會將該消息暫存在伺服器端,當消息的接收者登陸到系統後,再將該離線消息發給接收者
⑤ 在網上下載了一個安卓項目的源碼 有客戶端 伺服器端 資料庫備份,不知道應該怎麼配置起來
是不是ip沒改 ip要連你本機的IP 才能找到伺服器的servlet
⑥ 網上下載的安卓伺服器端源碼怎麼運行,要裝什麼軟體,導入什麼包
感覺又是一個做畢業設計的。。。android端用eclipse軟體,裝android adt插件,需要android sdk,然後配置下系統環境,網路有具體方法,我就不復制去了。伺服器端的你應該是用的tomcat?這要看你伺服器都有啥功能了,連接啥資料庫,或者用到上傳下載,或者需要xml,或者exl,都需要不同的包
⑦ androidpn服務端源碼修改後怎麼編譯
1.伺服器:
ConfigManager--配置信息載入類,
Config--配置信息管理類,可以得到配置文件中指定屬性的值;
CopyMessageUtil--將IQ中的id得到賦值給回執對象;
AuthManager--提供用戶認證的相關功能;
IQAuthHandler--接收並處理命名空間為「jabber:iq:auth」的消息請求,用於處理用戶驗證業務;
IQRegisterHandler--接收並處理命名空間為 "jabber:iq:register"的消息請求,用於處理用戶注冊業務;
IQRosterHandler--接收處理命名空間為"jabber:iq:roster"的消息請求,用於處理用戶獲取花名冊業務;--未提供實現,如需此功能需要擴展;
PresenceUpdateHandler--接收處理用戶的狀態變更請求信息;
Connection--一個XMPP連接伺服器的實例,提供發送消息及得到伺服器連接相關信息;
ConnectionCloseListener--客戶端與伺服器之間的連接斷開監聽器;
StanzaHandler--一個消息處理類,處理傳入的XML節,把接收到的消息轉換成一個XML的對象;
XmppIoHandler--繼承於MINA中的IOHandler,用於從MINA中接收消息,並把消息交給StanzaHandler類處理;
PresenceManager--用於管理用戶的在線狀態;
NotificationManager--消息通知發送管理類,提供了發送消息給客戶端的功能:
A.sendBroadcast--給所有在線用戶發送消息;
B.sendNotifcationToUser--給指定用戶發送消息 ;
C.sendNotifications--給指定的多個或一個用戶發送消息;
D.sendOfflineNotification--發送離線消息;
IQRouter--IQ請求路由類,繼承了IQHandler的IQ消息處理類需要在IQRouter類中注冊,IQRounter就會跟命名空間把消息路由到相應的處理類中去處理;
MessageRouter--Message消息路由類;
PresenceRouter--Presence消息路由類;
PacketDeliverer--發送到連接的會話;
PacketRouter--Packet路由類,在這個類里有IQRouter、PresenceRouter、MessageRouter三個類的對象,可以對三種類型的消息都可以進行處理路由;
ClientSession--代表一個客戶端與伺服器之間的連接;從這個連接中可以得到這個連接的相關信息,如用戶名,狀態等;
SessionManager--管理所有與伺服器之間的連接;
伺服器端接收客戶端消息處理流程:
2.Android端:
NotificationService類--後台運行並響應來自伺服器的事件推送通知服務;
ServiceManager類--載入客戶端中的配置信息,並管理NotifactionService服務的啟動與關閉;
XmppManager類--管理客戶端和伺服器之間的連接,向伺服器發送連接、注冊、登陸請求任務;
NotificationDetailsActivity --用於終端接收到的通知詳細視圖顯示;
NotificationIQ--通知實體;
NotificationIQProvider--一個xml的處理類,負責把一個xml結構的消息內容轉換成一個NotificationIQ通知實體對象;
NotificationPacketListener---接收從伺服器端推送過來的Packet;
NotificationSettingsActivity--設置信息;
NotificationReceiver--推送通知消息的廣播接收器;
PersistentConnectionListener--監控客戶端與伺服器之間的連接關閉和重新連接事件;
PhoneStateChangeListener--監聽手機狀態;
ConnectivityReceiver--網路變化廣播接收器;
PacketReader--從MINA中讀取推送過來的信息;
PacketWriter--向MINA中寫入回執信息;
接收消息處理流程:
PacketReader
init():
readerThread = new Thread() {
public void run() {
parsePackets(this);
}
};
-》parsePackets
-》processPacket
-》NotificationPacketListener
-》NotificationIQProvider
-》NotificatioIQ
-》Intent
-》發送回執、發出接收到消息的廣播
-》點擊消息的時候,再次給服務端發送一個查看請求,修改伺服器中消息的狀態;
如果服務端發送一個message類型的消息到客戶端後,客戶端是無法處理的。
也就是說客戶端可以發送不同類型的消息到服務端,但是卻不能處理服務端發回的除IQ認證消息以外的其他類型的消息。
如果需要擴展,需要在NotificationPacketListener類中加入處理邏輯,並提供相應的Provider、消息實體及後續處理邏輯。
⑧ 如何導入與配置從網上下載的android源代碼及伺服器端源代碼
將Android項目導入import進Eclipse。 注意SDK版本是否匹配 。 伺服器部署到Tomcat下。 你得在資料庫中將這個點菜系統的資料庫和表建好,或者導入。在伺服器的代碼中修改好你的資料庫名和密碼。
⑨ 如何編輯android 系統源碼
1、通過 ubuntu 軟體中心安裝 wine;
2、通過 ubuntu 軟體中心安裝 winetricks;
3、通過 winetricks 在 shell中輸入: winetricks mfc42
1、通過 wine windows 的方式啟動代理伺服器
2、設置瀏覽器代理伺服器
3、設置shell代理伺服器:
在shell中輸入 sudo gedit /etc/bash.bashrc
在文件 /etc/bash.bashrc 中添加
通過shell安裝如下的組件:
1、sudo apt-get install bison g++-multilib git gperf libxml2-utils
2、新建一個存放源碼的目錄,如:mkdir ~/andorid/source
3、在源碼目錄中輸入命令:repo init -u -b android-4.0.1_r1
其中: android-4.0.1_r1是android源碼的版本,更多的版本可以通過下面的方式查詢:
4、修改source/.repo/manifest/default.xml 文件中的 fetch 的值為:
git://Android.git.linaro.org/
通過如下的指令來設置郵箱和用戶名
git config --global user.name "<your name>" ----修改用戶名git config --global user.email "<your email>" ----修改email
5、在source目錄下輸入指令:repo sync
便開始了代碼的下載
方便他人亦是方便自己,如果覺得還行就點下下邊的投票吧,這樣可以幫助其他人更快的找到解決問題的方法;有疑問的也可留言哦, 謝謝!
⑩ 求帶有客戶端和伺服器端的Android應用程序源代碼(能運行的),謝謝
這是我個人的一個項目,客戶端,服務端以及資料庫都有。