㈠ 如何實現android和伺服器長連接
1:android客戶端通過service在後台通過servreScoket不斷的accept,一旦有相應的socket到達,則啟動一個線程去處理
2::在線程中處理完返回給我們android客戶端的消息或任務之後,要將這種結果表現在ui上,這個步驟方法就比較多了,例如你可以發一個廣播來通知ui,或者你可以通過一個static的handler來處理
*************************************service中的關鍵代碼
private void startSocketServer()
{
if (!isStarted)
{
try
{
serverSocket = new ServerSocket( 6661 );
isStarted = true;
}
catch (Exception e)
{
// TODO: handle exception
}
// 啟動線程處理
AcceptThread acceptThread = new AcceptThread();
acceptThread.start();
}
}
class AcceptThread extends Thread
{
@Override
public void run()
{
while (isStarted)
{
try
{
// 阻塞接收
Socket client = serverSocket.accept();
initClientSocket( client );
}
catch (Exception e)
{
// TODO: handle exception
}
}
super.run();
}
}
private void initClientSocket(Socket client)
{
boolean isRunnable = true;
/**
* 重置
**/
if (cInputStream != null)
{
try
{
cInputStream.close();
cInputStream = null;
}
catch (IOException e)
{
e.printStackTrace();
}
}
if (clientSocket != null)
{
try
{
clientSocket.close();
clientSocket = null;
}
catch (Exception e)
{
// TODO: handle exception
}
}
String resultStr = "";
clientSocket = client;
try
{
cInputStream = new DataInputStream( clientSocket.getInputStream() );
if (isRunnable)
{
StringBuffer sb1 = new StringBuffer();
int ss;
while ((ss = cInputStream.read()) != -1)
{
sb1.append( (char) ss );
}
resultStr = sb1.toString();
//發送廣播
Intent intent = new Intent();
intent.putExtra( "str", resultStr );
intent.setAction( "com.jone.receiver" );
sendBroadcast( intent );
// Message msg = ((MainActivity)getApplicationContext()).handler.obtainMessage();
// msg.obj = resultStr;
// ((MainActivity)getApplicationContext()).handler.sendMessage( msg );
}
}
catch (Exception e)
{
// TODO Auto-generated catch block
isRunnable = false;
e.printStackTrace();
}
}
㈡ Android真機如何連接PC的伺服器
Android真機連接PC的伺服器的方法為:
(1)將Android手機通過USB數據線連接電腦,在設備管理器中應該能看到Android Device。
(2)完成上一步之後,這個時候設置手機的無線和網路,開啟你機上的Android的Internet傳輸功能功能。就是可以用手機通過電腦上網,不同的手機可能叫法不同。(注意了:有的手機開啟這個功能時候要求關閉USB調試。)
(3)開啟Internet傳輸之後,手機可以通過PC聯網了。如果PC聯網,查看本機的IP地址(win+r ——>cmd ——>ipconfig),如果沒有聯網,自己設置一下本機靜態IP(怎麼設置問度娘)。記住這個IP地址。
(4)打開本地PC機的伺服器軟體(如開啟Tomcat),在手機端瀏覽器中輸入剛才的IP地址+服務埠即可。
㈢ Android客戶端怎麼與伺服器資料庫連接
不能與資料庫連接的
Android客戶端不能直接與伺服器資料庫連接。資料庫是需要非常大的內存,安裝之後有好幾G,連接資料庫要有一個像SQLServer里的webservice,這樣的一個橋梁來間接訪問。就是在伺服器運行一個服務端程序,該服務端程序通過接收來自android客戶端的指令,對資料庫進行操作。
客戶端的http請求可以通過 HttpClient類實現,在anddroid 4.0之後,客戶端的網路請求已經不被允許在主線程中運行,所以還需注意另開啟一個子線程進行網路請求。
(3)android鏈接伺服器擴展閱讀:
Android安全許可權機制:
Android默認設置下,所有應用都沒有許可權對其他應用、系統或用戶進行較大影響的操作。這其中包括讀寫用戶隱私數據(聯系人或電子郵件),讀寫其他應用文件,訪問網路或阻止設備待機等。安裝應用時,在檢查程序簽名提及的許可權,且經過用戶確認後,軟體包安裝器會給予應用許可權。
下載一款Android應用通常會要求如下的許可權:撥打電話、發送簡訊或彩信、修改/刪除SD卡上的內容、讀取聯系人的信息、讀取日程信的息,寫入日程數據、讀取電話狀態或識別碼、精確的(基於GPS)地理位置、模糊的(基於網路獲取)地理位置、創建藍牙連接、
還有對互聯網的完全訪問、查看網路狀態,查看WiFi狀態、避免手機待機、修改系統全局設置、讀取同步設定、開機自啟動、重啟其他應用、終止運行中的應用、設定偏好應用、震動控制、拍攝圖片等。
㈣ 如何實現android和伺服器的長連接
轉載 這種功能實際上就是數據同步,同時要考慮手機本身、電量、網路流量等等限制因素,所以通常在移動端上有一下兩個解決方案:
1.一種是定時去server查詢數據,通常是使用HTTP協議來訪問web伺服器,稱Polling(輪詢);
2.還有一種是移動端和伺服器建立長連接,使用XMPP長連接,稱Push(推送)。
從耗費的電量、流量和數據延遲性各方面來說,Push有明顯的優勢。但是使用Push的缺點是:
對於客戶端:實現和維護相對成本高,在移動無線網路下維護長連接,相對有一些技術上的開發難度。
對於伺服器:如何實現多核並發,cpu作業調度,數量龐大的長連接並發維護等技術,仍存在開發難點。
在講述Push方案的原理前,我們先了解一下移動無線網路的特點。
移動無線網路的特點:
因為 IP v4 的 IP 量有限,運營商分配給手機終端的 IP 是運營商內網的 IP,手機要連接 Internet,就需要通過運營商的網關做一個網路地址轉換(Network Address Translation,NAT)。簡單的說運營商的網關需要維護一個外網 IP、埠到內網 IP、埠的對應關系,以確保內網的手機可以跟 Internet 的伺服器通訊
GGSN(Gateway GPRS
Support Node 網關GPRS支持結點)模塊就實現了NAT功能。
因為大部分移動無線網路運營商都是為了減少網關的NAT映射表的負荷,所以如果發現鏈路中有一段時間沒有數據通訊時,會刪除其對應表,造成鏈路中斷。(關於NAT的作用及其原理可以查看我的另一篇博文:關於使用UDP(TCP)跨區域網,NAT穿透的心得)
Push在Android平台上長連接的實現:
既然我們知道我們移動端要和Internet進行通信,必須通過運營商的網關,所以,為了不讓NAT映射表失效,我們需要定時向Internet發送數據,因為只是為了不然NAT映射表失效,所以只需發送長度為0的數據即可。
這時候就要用到定時器,在android系統上,定時器通常有一下兩種:
1.java.util.Timer
2.android.app.AlarmManager
分析:
Timer:可以按照計劃或者時間周期來執行相關的任務。但是Timer需要用WakeLock來讓CPU保持喚醒狀態,才能保證任務的執行,這樣子會消耗大量流量;當CPU處於休眠的時候,就不能喚醒執行任務,所以應用於移動端明顯是不合適。
AlarmManager:AlarmManager類是屬於android系統封裝好來管理RTC模塊的管理類。這里就涉及到RTC模塊,要更好地了解兩者的區別,就要明白兩者真正的區別。
RTC(Real- Time Clock)實時鬧鍾在一個嵌入式系統中,通常採用RTC
來提供可靠的系統時間,包括時分秒和年月日等;而且要求在系統處於關機狀態下它也能夠正常工作(通常採用後備電池供電),它的外圍也不需要太多的輔助電路,典型的就是只需要一個高精度的32.768KHz
晶體和電阻電容等。(如果對這方面感興趣,可以自己查閱相關資料,這里就說個大概)
好了,回來正題。所以,AlarmManager又稱全局定時鬧鍾。這意味著,當我用使用AlarmManager來定時執行任務,CPU可以正常地休眠,只有在執行任務是,才喚醒CPU,這個過程是很短時間的。
下面簡單來說明其使用:
1.類似於Timer功能:
//獲得鬧鍾管理器
AlarmManager
am = (AlarmManager)getSystemService(ALARM_SERVICE);
//設置任務執行計劃
am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime, 5*1000,
sender);//從firstTime才開始執行,每隔5秒再執行
2.實現全局定時功能:
//獲得鬧鍾管理器
AlarmManager
am = (AlarmManager)getSystemService(ALARM_SERVICE);
//設置任務執行計劃
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,
5*1000, sender);//從firstTime才開始執行,每隔5秒再執行
總結:在android客戶端使用Push推送時,應該使用AlarmManager來實現心跳功能,使其真正實現長連接。
㈤ android真機怎麼連接PC伺服器
Android真機連接PC的伺服器的方法為: (1)將Android手機通過USB數據線連接電腦,在設備管理器中應該能看到Android Device。 (2)完成上一步之後,這個時候設置手機的無線和網路,開啟你機上的Android的Internet傳輸功能功能。就是可以用手機通過電腦上網,不同的手機可能叫法不同。(注意了:有的手機開啟這個功能時候要求關閉USB調試。) (3)開啟Internet傳輸之後,手機可以通過PC聯網了。如果PC聯網,查看本機的IP地址(win+r ——>cmd ——>ipconfig),如果沒有聯網,自己設置一下本機靜態IP(怎麼設置問度娘)。記住這個IP地址。 (4)打開本地PC機的伺服器軟體(如開啟Tomcat),在手機端瀏覽器中輸入剛才的IP地址+服務埠即可。
㈥ android 如何連接自己的伺服器
10樓的這個是httpresponse是判斷伺服器返回數據的方法,而樓主想要的是判斷連接的伺服器地址是否通,我現在也在愁這個事情,httppost里找了好多方法都不行。
㈦ Android開發中客戶端和伺服器端怎麼連接
首先你除了會安卓開發外要會javaweb或php等伺服器語言。然後給伺服器編寫對資料庫的操作和給app提供操作的介面,之後你的伺服器連接資料庫,你的app通過http等協議通過介面就能實現你想要的了。大概就是這樣的流程,一般在公司中伺服器的代碼不需要你寫。具體的不是三言兩語就能做好的,網上搜搜大神們的寫案例吧。
㈧ android連接網路伺服器
package com.test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
public class TestPost extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.loading);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
final Map<String, String> params0 = new HashMap<String, String>();
params0.put("username", username);
params0.put("password", password);
final String url0 = "http://192.168.0.11:80/xxxx.php";
Runnable downloadRun = new Runnable() {
@Override
public void run() {
Looper.prepare();
try {
String result0 = sendPostRequest(
params0, url0);
JSONObject jsonObject = new JSONObject(result0);
String status = jsonObject.getString("status");
String message = jsonObject.getString("message");
if (status.equals("success")) {
//成功幹啥
} else {
//失敗幹啥
}
} catch (Exception e) {
//出現異常幹啥
}
}
};
new Thread(downloadRun).start();
}
}, 200);
}
//post請求方法
public String sendPostRequest(Map<String, String> params, String actionurl)
throws Exception {
String URl = actionurl;
StringBuilder sb = new StringBuilder();
if (params != null && !params.isEmpty()) {
for (Map.Entry<String, String> entry : params.entrySet()) {
sb.append(entry.getKey()).append('=')
.append(URLEncoder.encode(entry.getValue(), "UTF-8"))
.append('&');
}
sb.deleteCharAt(sb.length() - 1);
}
byte[] entitydata = sb.toString().getBytes();// 得到實體的二進制數據
URL url = new URL(URl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setConnectTimeout(10000);
conn.setDoOutput(true);// 如果通過post提交數據,必須設置允許對外輸出數據
conn.setUseCaches(false);// 是否緩存
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length",String.valueOf(entitydata.length));
OutputStream outStream = conn.getOutputStream();
outStream.write(entitydata);
outStream.flush();
outStream.close();
BufferedReader bufferRead = null;
if(conn.getResponseCode() == 200){
bufferRead = new BufferedReader(new InputStreamReader(conn.getInputStream()));
}
String result = "";
String readLine = null;
while ((readLine = bufferRead.readLine()) != null) {
result += readLine;
}
bufferRead.close();
conn.disconnect();
return result;
}
}
我用的是這種方法
㈨ android開發中,如何連接伺服器,從伺服器讀取到數據
伺服器端生成JSON:
使用HttpURLConnection連接,通過JSON格式傳遞對象數據
URLurl=newURL(urlpath);
HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
InputStreaminStream=conn.getInputStream();
=newByteArrayOutputStream();
byte[]data=newbyte[1024];
intlen=0;
while((len=inStream.read(data))!=-1){
outStream.write(data,0,len);
System.out.println(len);
}
inStream.close();
byte[]rlt=outStream.toByteArray();
returnnewString(rlt);
㈩ android怎麼使用數據網連接伺服器
android客戶端不能直接與伺服器資料庫連接,拿sqlserver來說,安裝之後有幾個G那麼大,android程序是跑在手機上的,想讓程序直接訪問sqlserver,那手機需要非常大的內存。但是可以通過webservice這樣一個橋梁來間接訪問SQLServer。
即在伺服器運行一個服務端程序,該服務端程序通過接收來自android客戶端的指令,對資料庫進行操作。客戶端與服務端直接的數據傳輸主要通過http協議發送和接收json數據或者xml數據,服務端接收到客戶端的json數據之後,進行json解析,再按一定的邏輯對資料庫進行增、刪、改、查。客戶端的http請求可以通過 HttpClient類實現,在anddroid 4.0之後,客戶端的網路請求已經不被允許在主線程中運行,所以題主還需注意另開啟一個子線程進行網路請求。