當前位置:首頁 » 雲伺服器 » 如何實現移動端和伺服器端的通信

如何實現移動端和伺服器端的通信

發布時間: 2025-03-26 21:44:36

『壹』 android、ios客戶端和伺服器通信一般使用什麼方式,各有什麼優缺點

1、從網路協議上來看,就http方式和socket方式。
2、http方式開發起來效率想對要高一點,但是對於推送這種來說,想對要難做點,因為http是短連接。socket這種方式開發要長,調試略微麻煩,但是做推送想對簡單,可以建立一個長連接。
3、Web Service服務其實也是基於HTTP協議(它基於SOAP協議,而SOAP又是基於HTTP協議)。
最大缺點我覺得是Web Service實在是太厚重了,特別對於移動端來說,WSDL是基於XML,XML已經夠厚重了,WSDL還有一些頭信息,更加厚重。
而且JSON + HTTP的方式,相對來說就非常輕量級了,JSON格式數據本生就是javascript中的數據或者對象,所以在網路傳輸中具有非常明顯優勢,可以說本來就是網路傳輸用的,毫無違和感嘛:)
還有一個不能算缺點的缺點:目前移動端HTTP網路庫多的要死,Web Service我所知道就是ksoap2,而且非常的難用。。。

『貳』 設備級、應用級和微應用級的雙向認證安全隧道是如何區分和實施的

通過切面方式零改造嵌入,提供設備級、應用級和微應用級的雙向認證安全隧道,實現移動端到服務端的動態訪問控制和數據加密保護,保障移動業務的通信安全。

在技術實現中,設備級認證安全隧道主要關注設備本身的身份驗證,通過硬體密鑰或生物識別技術,確保設備的真實性。設備級安全隧道在用戶設備和伺服器之間建立加密通道,僅允許已認證的設備訪問特定服務,有效防止非授權設備的接入。

應用級認證安全隧道則側重於應用層面的身份驗證,通過用戶賬號、密碼或第三方身份驗證服務,確認訪問應用的合法用戶。應用級安全隧道在用戶和應用之間建立安全連接,確保數據傳輸的安全性,同時防止惡意軟體或釣魚攻擊。

微應用級認證安全隧道更加細致,針對具體功能或服務模塊進行認證保護。通過API密鑰、OAuth等機制,實現對微應用的訪問控制和數據加密。這種方式不僅提升了系統的安全性,還能靈活地管理不同服務的訪問許可權。

這三個層次的認證安全隧道相互配合,形成一個多層次的安全防護體系。設備級保障設備身份,應用級確保用戶身份,微應用級細化功能訪問控制,共同構建起移動端到服務端的安全通道。通過動態訪問控制和數據加密,實現移動業務的全方位安全保護,有效抵禦各種安全威脅。

總結來說,設備級、應用級和微應用級認證安全隧道通過不同層次的身份驗證和數據保護機制,確保移動端到服務端的通信安全。它們共同構建了一個立體化的安全防護網路,為移動業務提供了堅實的保護,有效防止了未經授權的訪問和數據泄露,保障了移動應用的穩定運行和用戶數據的安全。

『叄』 如何實現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來實現心跳功能,使其真正實現長連接。

『肆』 JAVA服務端android客戶端如何通信

一、HTTP請求(APACHE的HttpClient實現)
伺服器端,就是普通的servlet、Strutus2就可以
移動端
protected static String get(String url, List<NameValuePair> params) {
String resultMsg;

// 設置http請求配置
HttpParams parms = new BasicHttpParams();
parms.setParameter("charset", HTTP.UTF_8);
// 配置連接超時
HttpConnectionParams.setConnectionTimeout(parms, 10 * 1000);
// 設置請求超時
HttpConnectionParams.setSoTimeout(parms, 15 * 1000);
// 實例化HttpClient
HttpClient httpclient = new DefaultHttpClient(parms);
// 實例化HttpGet
HttpGet httpget = new HttpGet(url);
// 設置請求頭
httpget.addHeader("Content-Type", "application/json");
httpget.addHeader("charset", HTTP.UTF_8);

try {
if (params.size() > 0)
url = url + "?" + URLEncodedUtils.format(params, HTTP.UTF_8);

HttpResponse resp = httpclient.execute(httpget);
int statusCode = resp.getStatusLine().getStatusCode();

if (statusCode == HttpStatus.SC_OK) {
StringBuffer result = getResponse(resp);
resultMsg = result.toString();
} else {
resultMsg = "連接異常";
}
} catch (Exception e) {
resultMsg = "連接異常";
} finally {
// 關閉get
httpget.abort();
// 關閉連接 ,釋放資源
httpclient.getConnectionManager().shutdown();
}
return resultMsg;
}

protected static String post(String uri, Object params) {
String resultMsg;
// 設置http請求配置
HttpParams hp = new BasicHttpParams();
hp.setParameter("charset", HTTP.UTF_8);
// 配置連接超時
HttpConnectionParams.setConnectionTimeout(hp, 10 * 1000);
HttpConnectionParams.setSoTimeout(hp, 15 * 1000);
// 實例化HttpClient
HttpClient httpclient = new DefaultHttpClient(hp);
// 實例化HttpPost請求
HttpPost httppost = new HttpPost(uri);
// 設置頭信息
httppost.addHeader("Content-Type", "application/json");
httppost.addHeader("charset", HTTP.UTF_8);
try {
// 將參數進行json化
ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(params);
Log.i(TAG, "URI=" + uri + ",BEAN=" + jsonStr);
// 定義消息實體
StringEntity se = new StringEntity(jsonStr, HTTP.UTF_8);
httppost.setEntity(se);
// 通信
HttpResponse resp = httpclient.execute(httppost);
int statusCode = resp.getStatusLine().getStatusCode();
Log.i(TAG, "StatusCode=" + statusCode);
if (statusCode == HttpStatus.SC_OK) {
StringBuffer result = getResponse(resp);
resultMsg = result.toString();
} else {
resultMsg = "連接異常";
}
} catch (Exception e) {
e.printStackTrace();
resultMsg = "連接異常";
} finally {
// 關閉get
httppost.abort();
// 關閉連接 ,釋放資源
httpclient.getConnectionManager().shutdown();
}
Log.i(TAG, resultMsg);
return resultMsg;
}
二、SOCKET連接
伺服器端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class service_java_test {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000); //綁定的埠號
Socket socket = server.accept(); //連接不成功以至於下一行的"連接成功"
//在調試區顯示不出來
System.out.println("連接成功");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
while (true) {
String msg = in.readLine();
System.out.println(msg);
out.println("Server received " + msg); //向接收方發送已接受到了的語句
out.flush();
if (msg.equals("bye")) { //若接收到"bye"則break
break;
}
}
socket.close();
}
}

安卓客戶端:
package com.example.t4_android;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView myTextView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myTextView = (TextView) findViewById(R.id.textView1);
Thread t = new Thread(new Runnable(){
public void run(){
try {
Socket sk = new Socket("192.168.253.1", 10000);//綁定套接字,這一行一直執行不成功
//以至於下一行在安卓頁面的TextView上
//不顯示「已連接」的字樣
//"192.168.253.1"是我利用DOS命令查找
//的本機IP
myTextView.setText("已連接");
} catch (Exception e) {
e.printStackTrace();
}
}
});
t.start();
}
}

熱點內容
怎麼清除視頻緩存 發布:2025-03-29 23:17:21 瀏覽:963
怎麼看伺服器支持偽裝ip 發布:2025-03-29 23:07:33 瀏覽:325
卡宴和卡宴s配置有什麼不同 發布:2025-03-29 23:02:20 瀏覽:262
R參數編程 發布:2025-03-29 22:59:50 瀏覽:240
連接sqlserver2008 發布:2025-03-29 22:47:24 瀏覽:625
電信開戶密碼是多少 發布:2025-03-29 22:44:53 瀏覽:505
vivo手機存儲空間怎麼清理 發布:2025-03-29 22:43:59 瀏覽:958
tv之家密碼是多少 發布:2025-03-29 22:43:50 瀏覽:322
lol腳本連招 發布:2025-03-29 22:09:58 瀏覽:789
楚留香電腦伺服器與手機一致嗎 發布:2025-03-29 22:05:41 瀏覽:648