當前位置:首頁 » 安卓系統 » androidsocket心跳

androidsocket心跳

發布時間: 2022-06-02 22:47:23

A. android如何判斷socket斷開

無法直接判定對方已斷開或已關閉socket.
在對話協議,定義好心跳包的處理,定時向對方發心跳包,對方必須應答,
在超過自已規定的時間(超時值)後仍不應答,就認為對方已斷開連接;

B. android socket tcp 為什麼要發送心跳包

後台開啟一個線程一直運行,每隔1分鍾左右發送一個心跳報文給伺服器,以確保時刻跟伺服器鏈接。若超過3次伺服器未對客戶端發送的心跳報文做出回應則重新鏈接。 如果這么作的話,必須確保和伺服器達成一定的應用層協議。

C. android中怎樣維護socket長連接

http://git.oschina.net/fengcunhan/SocketTest用alarmanager來發送心跳來判斷與伺服器的鏈接狀態

D. 如何干凈的實現Android/java Socket 長連接通信

所謂長連接,它通常包含以下幾個關鍵過程:

  1. 輪詢的建立
    建立輪詢的過程很簡單,瀏覽器發起請求後進入循環等待狀態,此時由於伺服器還未做出應答,所以HTTP也一直處於連接狀態中。
    2. 數據的推送
    在循環過程中,伺服器程序對數據變動進行監控,如發現更新,將該信息輸出給瀏覽器,隨即斷開連接,完成應答過程,實現「伺服器推」。
    3. 輪詢的終止
    輪詢可能在以下3種情況時終止:
    3.1. 有新數據推送
    當循環過程中伺服器向瀏覽器推送信息後,應該主動結束程序運行從而讓連接斷開,這樣瀏覽器才能及時收到數據。
    3.2. 沒有新數據推送
    循環不能一直持續下去,應該設定一個最長時限,避免WEB伺服器超時(Timeout),若一直沒有新信息,伺服器應主動向瀏覽器發送本次輪詢無新信息的正常響應,並斷開連接,這也被稱為「心跳」信息。
    3.3. 網路故障或異常
    由於網路故障等因素造成的請求超時或出錯也可能導致輪詢的意外中斷,此時瀏覽器將收到錯誤信息。
    4. 輪詢的重建
    瀏覽器收到回復並進行相應處理後,應馬上重新發起請求,開始一個新的輪詢周期。

客戶端代碼片段

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isELIgnored="false" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="author" content="hoojo & http://hoojo.cnblogs.com"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <%@ include file="/tags/jquery-lib.jsp"%> <script type="text/javascript"> $(function () { window.setInterval(function () { $.get("${pageContext.request.contextPath}/communication/user/ajax.mvc", {"timed": new Date().getTime()}, function (data) { $("#logs").append("[data: " + data + " ]<br/>"); }); }, 3000); }); </script> </head> <body> <div id="logs"></div> </body> </html>

伺服器端代碼






@RequestMapping("/ajax") public void ajax(long timed, HttpServletResponse response) throws Exception { PrintWriter writer = response.getWriter(); Random rand = new Random(); // 死循環 查詢有無數據變化 while (true) { Thread.sleep(300); // 休眠300毫秒,模擬處理業務等 int i = rand.nextInt(100); // 產生一個0-100之間的隨機數 if (i > 20 && i < 56) { // 如果隨機數在20-56之間就視為有效數據,模擬數據發生變化 long responseTime = System.currentTimeMillis(); // 返回數據信息,請求時間、返回數據時間、耗時 writer.print("result: " + i + ", response time: " + responseTime + ", request time: " + timed + ", use time: " + (responseTime - timed)); break; // 跳出循環,返回數據 } else { // 模擬沒有數據變化,將休眠 hold住連接 Thread.sleep(1300); } } }

E. android socket 異常退出問題

你沒有用線程!!!
--------------------
客戶Socket
產生Socket對象,客戶端連接服務端的埠,這也需要放到線程中,由newSocket()子程序負責; 讀Socket得到的字元串通過消息傳給主程序協助顯示,這由clientRead(Socket sk)子程序負責,這兩個耗時性子程序都要放到子線程才能工作, clientRead(final String ip,final int port)產生即時子線程供調用。

Socket newSocket(String ip,int port)
{ Socket sk=null;
try
{ sk=new Socket(ip,port); // 連接服務端,返回Socket
}
catch(Exception e)
{
}
return(sk);
}
void clientRead(Socket sk)
{ // 客戶端讀Socket
DataInputStream inf;
try
{ inf=new DataInputStream(sk.getInputStream());
while(sk.isConnected() && !sk.isClosed())
{ String s=inf.readUTF();
if (s.length()>0)
{ Message msg=cHandler.obtainMessage(2,s);
cHandler.sendMessage(msg);
}
}
}
catch(Exception e)
{
}
}
void clientRead(final String ip,final int port)
{ // 子線程中客戶端讀Socket
new Thread(new Runnable()
{ @Override
public void run()
{ Socket sk=newSocket(ip,port);
clientSocket=sk;
if (sk!=null)
clientRead(sk);
}
}).start();
}
一次成功的連接,在服務端與客戶端各自都會產生一個Socket對象,並包含了許多方法與屬性,對象中可以知道對方的IP地址與埠,還有判斷連接狀態的函數,如Socket.isConected()和Socket.isClosed(),但這只能判斷自已的Socket是否已連接與斷開,但無法判斷對方的是否斷開狀態,解決的辦法是服務端向對方發「心跳包」或自行在對話協議中向對方發應答命令,以是否響應超時作為判斷對方是否斷開的依據。

F. android socket 問題 android 客戶端 與java伺服器socket通信 ,當伺服器突然中斷後

心跳檢測,斷開後立刻重新連接

G. android 鎖屏後 socket假死現象

假死就證明系統出問題了,刷機吧,希望被採納,謝謝!

H. 非同步Socket 心跳包問題

因為你用的是非同步socket通訊,應該在endreceive里收到異常。
對這個異常進行解析就可以處理了。

我更喜歡用同步socket通訊+線程來做。
當然非同步的也一樣的。

I. android上的socket通信的開源框架有哪些

Netty是由JBOSS提供的一個java開源框架。Netty提供非同步的、事件驅動的網路應用程序框架和工具,用以快速開發高性能、高可靠性的網路伺服器和客戶端程序。也就是說,Netty 是一個基於NIO的客戶,伺服器端編程框架,它在socket的基礎上根據各種常用的應用協議又進一步封裝,提供更便利的介面。如果需要快速搭建一個C/S服務框架,那Netty過來用是沒錯。 反過來你的情況是需要學習這個課程,你應該掌握基本的socket編程及其通信原理,所以學習時直接用socket編程比較好。也許哪一天,你靈感來了,編出一個比Netty更好的框架,一個更牛的軟體。

熱點內容
java小數正則表達式 發布:2025-05-20 11:30:58 瀏覽:135
文件夾加密win7 發布:2025-05-20 11:27:46 瀏覽:836
壓縮文件設置密碼有什麼意思 發布:2025-05-20 11:26:37 瀏覽:550
造夢西遊qq登錄如何修改密碼 發布:2025-05-20 11:18:36 瀏覽:381
淘寶緩存清理後還是大 發布:2025-05-20 11:15:39 瀏覽:149
ios雲存儲自動訂購 發布:2025-05-20 11:06:22 瀏覽:110
編程與數學 發布:2025-05-20 11:01:23 瀏覽:444
asp連接遠程資料庫 發布:2025-05-20 10:50:20 瀏覽:390
一般電腦配置哪個好 發布:2025-05-20 10:40:58 瀏覽:603
我的世界擼樹伺服器 發布:2025-05-20 10:33:37 瀏覽:741