導航:首頁 > 編程語言 > javasocke失敗後怎樣重連

javasocke失敗後怎樣重連

發布時間:2024-01-27 16:21:38

『壹』 java socket如果服務端掉線 客戶端應該怎樣重連,實現的思路是怎麼樣的,最好能有具體的代碼參考一下

看代碼,不明白的追問

// 無窮循環,用於自動重新連接網關
while (true) {
// 捕獲sleep異常
try {
// 捕獲socket異常
try {
// 創建socket連接
socketGateway = new Socket("127.0.0.1", 8888);

// 創建輸入輸出對象
inStream = new DataInputStream(socketGateway.getInputStream());
outStream = new DataOutputStream(socketGateway.getOutputStream());

byte buf[] = new byte[1]; // 數據緩沖區
int intLen; // 讀緩沖區返回的長度

// 無窮循環,用於讀緩沖區數據
while (true) {
// 捕獲讀緩沖區異常
try {
intLen = inStream.read(buf, 0, 1);

// 可讀長度-1則斷開連接
if (intLen == -1) {
break;
}

// 處理buf
}

// 連接斷開
catch (EOFException e) {
break;
}

// 接收數據超時
catch (SocketTimeoutException e) {
break;
}

// 超過數據包末尾
catch (IOException e) {
break;
}
}
} catch (Exception e) {
// 處理socket錯誤
}

// 休眠1秒後重連
sleep(1000);
} catch (Exception e) {
// 處理sleep錯誤
}
}

『貳』 java編程中,Socket通信是怎麼實現的

java編程對於Socket之間的通信過程如下:

服務端往Socket的輸出流裡面寫東西,客戶端就可以通過Socket的輸入流讀取對應的內容。Socket與Socket之間是雙向連通的,所以客戶端也可以往對應的Socket輸出流裡面寫東西,然後服務端對應的Socket的輸入流就可以讀出對應的內容。下面來看一些服務端與客戶端通信的例子:

publicclassServer{

publicstaticvoidmain(Stringargs[])throwsIOException{
//為了簡單起見,所有的異常信息都往外拋
intport=8899;
//定義一個ServerSocket監聽在埠8899上
ServerSocketserver=newServerSocket(port);
//server嘗試接收其他Socket的連接請求,server的accept方法是阻塞式的
Socketsocket=server.accept();
//跟客戶端建立好連接之後,我們就可以獲取socket的InputStream,並從中讀取客戶端發過來的信息了。
Readerreader=newInputStreamReader(socket.getInputStream());
charchars[]=newchar[64];
intlen;
StringBuildersb=newStringBuilder();
while((len=reader.read(chars))!=-1){
sb.append(newString(chars,0,len));
}
System.out.println("fromclient:"+sb);
reader.close();
socket.close();
server.close();
}

}
客戶端代碼
Java代碼publicclassClient{

publicstaticvoidmain(Stringargs[])throwsException{
//為了簡單起見,所有的異常都直接往外拋
Stringhost="127.0.0.1";//要連接的服務端IP地址
intport=8899;//要連接的服務端對應的監聽埠
//與服務端建立連接
Socketclient=newSocket(host,port);
//建立連接後就可以往服務端寫數據了
Writerwriter=newOutputStreamWriter(client.getOutputStream());
writer.write("HelloServer.");
writer.flush();//寫完後要記得flush
writer.close();
client.close();
}

}

『叄』 java中socket如何讓服務端一直等待,客戶端每隔一段時間鏈接一次

1、服務端
使用ServerSocket 在確定埠之後,調用accept() 方法 。 這樣 服務端就會阻塞在accept() 這里 直到有客戶端請求版過來 才會接著往下權執行,後面你就寫獲取文件夾內容的具體邏輯代碼 然後寫入流裡面 傳回給客戶端就可以了

2、客戶端
客戶端你要求每隔一段時間 有很多種方法可以實現 比如說寫個timer 在間隔指定時間段向Server端發起請求就可以了,具體方式就是new Socket(ip,埠) 連接上了之後 可以得到Server端寫在流里的數據 讀出來就可以了

中間的細節 自己去琢磨一下 要循環往復 可以通過多線程來實現。

Socket的具體使用 可以查看官方api或者google

『肆』 java socket 判斷是否斷開了

首先想到socket類的方法isClosed()、isConnected()、isInputStreamShutdown()、isOutputStreamShutdown()等,但經過試驗並查看相關文檔,這些方法都是本地端的狀態,無法判斷遠端是否已經斷開連接。
然後想到是否可以通過OutputStream發送一段測試數據,如果發送失敗就表示遠端已經斷開連接,類似ping,但是這樣會影響到正常的輸出數據,遠端無法把正常數據和測試數據分開。
最後又回到socket類,發現有一個方法sendUrgentData,查看文檔後得知它會往輸出流發送一個位元組的數據,只要對方Socket的SO_OOBINLINE屬性沒有打開,就會自動舍棄這個位元組,而SO_OOBINLINE屬性默認情況下就是關閉的,太好了,正是我需要的!
於是,下面一段代碼就可以判斷遠端是否斷開了連接:
try{
socket.sendUrgentData(0xFF);
}catch(Exception ex){
reconnect();
}
用ping實現
package com.csdn.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class test {
static BufferedReader bufferedReader;
public static void main(String[] args) throws IOException {
try {
Process process = Runtime.getRuntime().exec("ping 192.168.1.104");//判斷是否連接的IP;
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream()));
String connectionStr = "";
while ((connectionStr = bufferedReader.readLine()) != null) {
System.out.println(connectionStr);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
bufferedReader.close();
}
}
}
ping的方法有個嚴重的BUG,就是你只能判斷對方是否連接網路,而不能判斷客戶端是否開啟...
我在寫聊天室時經常要注意客戶端異常退出的問題(比如客戶直接調用任務管理器結束程序進程),
其實在通過socket.getoutstream和socket.getinputstream流對客戶端發送、接受信息時如果socket沒連接上是會拋出異常的,這也就是為什麼Java會要求網路編程都要寫在try裡面,所以只要在catch裡面寫入客戶端退出的處理就行了,沒必要專門去想什麼方法

『伍』 java資料庫自動重連

連接資料庫的話不是有個返回值么,如果返回記錄的話rs.next!=null
如果沒有返回記錄rs.next==null
然後你就內用rs.next判斷
if(rs.next==null)
{
//此處寫方容法等待五秒重新連接調用這個類
}
else
{
//接受資料庫穿出來的值
}

上面如果不行
就寫個try catch語句:
try
{
//連接資料庫
}
catch(...)
{
//如果有異常,說明資料庫還沒有啟動
//等待五秒重新連接調用這個類

}

閱讀全文

與javasocke失敗後怎樣重連相關的資料

熱點內容
mdfldf是什麼文件 瀏覽:569
文件在桌面怎麼刪除干凈 瀏覽:439
馬蘭士67cd機版本 瀏覽:542
javaweb爬蟲程序 瀏覽:537
word中千位分隔符 瀏覽:392
迷你編程七天任務的地圖怎麼過 瀏覽:844
word2003格式不對 瀏覽:86
百度雲怎麼編輯文件在哪裡 瀏覽:304
起名app數據哪裡來的 瀏覽:888
微信怎麼去泡妞 瀏覽:52
百度廣告html代碼 瀏覽:244
qq瀏覽器轉換完成後的文件在哪裡 瀏覽:623
jsp中的session 瀏覽:621
壓縮完了文件去哪裡找 瀏覽:380
武裝突襲3浩方聯機版本 瀏覽:674
網路機頂盒移動網路 瀏覽:391
iphone手機百度雲怎麼保存到qq 瀏覽:148
資料庫設計與實踐讀後感 瀏覽:112
js對象是什麼 瀏覽:744
網頁文件存pdf 瀏覽:567

友情鏈接