日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java socket 阻塞模式_Java中Socket Read阻塞问题

發布時間:2025/3/12 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java socket 阻塞模式_Java中Socket Read阻塞问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本人來說并不熟悉JAVA語言,只是近期在分析某個簡單的java agent程序時,根據對應的代碼寫了一個對接的程序,兩者之間是典型的C/S socket編程。客戶端在向服務端發送相應的指令后,服務端(裝agent的主機)執行后會返回執行的數據給客戶端。在直接一行行收取數據時是正常的,但通過while循環時會卡住。

一、java讀取數據的兩種方式

從Socket上讀取對端發過來的數據一般有兩種方法:一種是按字節,一種是按字符。

1、按照字節流讀取

BufferedInputStream in = new BufferedInputStream(socket.getInputStream());

int r = -1;

List l = new LinkedList();

while ((r = in.read()) != -1) {

l.add(Byte.valueOf((byte) r));

}

2、按照字符流讀取

readLine()方法在進行讀取一行時,只有遇到回車(\r)或者換行符(\n)才會返回讀取結果,這就是“讀取一行的意思”。如果不指定buffer大小,則readLine()使用的buffer有8192個字符。在達到buffer大小之前,只有遇到"/r"、"/n"、"/r/n"才會返回。BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String s;

while ((s = in.readLine()) != null) {

System.out.println("Reveived: " + s);

}

read()和readLine()都會讀取對端發送過來的數據,如果不加while循環時,是不會存在異常阻塞的情況的。但在使用while后,如果無數據可讀,就會阻塞直到有數據可讀。或者到達流的末尾,這個時候分別返回-1和null。具體也可以參看segmentfault上別人的提問和回答。

使用while的好處就是對于返回數據較多的情況,比較方便,如果是直接readLine而不加while時,默認只能取得最后一行的數據;其壞處也顯而易見----阻塞等待。

二、異常處理

1、服務端處理

發送完后調用Socket的shutdownOutput()方法關閉輸出流,這樣對端的輸入流上的read操作就會返回-1。注意不能調用socket.getInputStream().close()。這樣會導致socket被關閉。當然如果不需要繼續在socket上進行讀操作,也可以直接關閉socket。但是這個方法不能用于通信雙方需要多次交互的情況。

2、客戶端處理

為了防止read操作造成程序永久掛起,還可以給socket設置超時。例如下面的方法設定超時3秒:

socket.setSoTimeout(3000)

如果read()方法在設置時間內沒有讀取到數據,就會拋出一個java.net.SocketTimeoutException異常。

3、雙方約定

發送數據時,約定數據的首部固定字節數為數據長度。這樣讀取到這個長度的數據后,就不繼續調用read方法。或者雙方約定結尾字符信息,在讀取到相應信息時,客戶端主動發送斷開連接的信息,或者發送信號給服務端,由服務端斷開連接。

三、其他

我在實際使用中,使用了上面異常處理中提到的第三種。但在應用中如果由客戶端進行超進異常斷開連接時,客戶端在接收數據過程中會收到異常信息如下:

這時候就需要使用try……catch(Exception e)語句進行異常捕獲處理。最終一個完整的客戶端請求如下:

import java.io.*;

import java.net.*;

public class TalkClient {

public static void main(String args[]) {

try{

Socket socket=new Socket("127.0.0.1",4700);

//向本機的4700端口發出客戶請求

BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));

//由系統標準輸入設備構造BufferedReader對象

PrintWriter os=new PrintWriter(socket.getOutputStream());

//由Socket對象得到輸出流,并構造PrintWriter對象

BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));

//由Socket對象得到輸入流,并構造相應的BufferedReader對象

String readline;

readline=sin.readLine(); //從系統標準輸入讀入一字符串

while(!readline.equals("bye")){

//若從標準輸入讀入的字符串為 "bye"則停止循環

os.println(readline);

//將從系統標準輸入讀入的字符串輸出到Server

os.flush();

//刷新輸出流,使Server馬上收到該字符串

System.out.println("Client:"+readline);

//在系統標準輸出上打印讀入的字符串

System.out.println("Server:"+is.readLine());

//從Server讀入一字符串,并打印到標準輸出上

readline=sin.readLine(); //從系統標準輸入讀入一字符串

} //繼續循環

os.close(); //關閉Socket輸出流

is.close(); //關閉Socket輸入流

socket.close(); //關閉Socket

}catch(Exception e) {

System.out.println("Error"+e); //出錯,則打印出錯信息

}

}

}

總結

以上是生活随笔為你收集整理的java socket 阻塞模式_Java中Socket Read阻塞问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 凹凸福利视频 | 性――交――性――乱a | 日韩欧美在线免费 | 伊人激情 | 日韩一级av毛片 | 草久视频在线观看 | av网站大全在线观看 | 天天玩天天操 | 天堂亚洲网| 麻豆影视av | 徐锦江一级淫片免费看 | 一区二区三区免费在线观看视频 | 污污的视频在线免费观看 | 亚洲va天堂va国产va久 | se欧美| 特黄色一级片 | 无码人妻丰满熟妇区96 | 亚洲最大黄色网址 | 国产又粗又猛又爽又黄的视频小说 | 激情婷婷综合网 | 一级香蕉视频在线观看 | 成人夜色| 国产成人一区二区三区电影 | www.亚洲一区 | 久久一区二区三区视频 | 日本不卡视频 | 久久久综合网 | 草草在线免费视频 | 欧美成人午夜精品免费 | 亚洲一二区视频 | 成片免费观看视频 | 噼里啪啦国语电影 | 自拍偷拍亚洲欧美 | 久久久久性色av无码一区二区 | 美女免费网站 | se日韩| ass精品国模裸体欣赏pics | 天干夜夜爽爽日日日日 | 天天视频黄 | 熟妇人妻精品一区二区三区视频 | 蜜桃视频在线观看一区二区 | 亚洲国产aaa | 欧美大片高清免费观看 | 欧美黄色aaa| 夜夜草网站 | 亚洲国产不卡 | 在线免费观看日本 | 亚洲影视在线 | 午夜影院一区二区三区 | 欧美性大战久久久 | 日本一二三区在线 | 午夜丰满寂寞少妇精品 | 污片在线观看 | 奴性白洁会所调教 | 欧美涩涩涩 | 国产精品99久久久久久久女警 | 人人澡超碰碰97碰碰碰 | 一区二区三区小说 | 乌克兰性极品xxxhd | 免费av大全| 欧美最顶级a∨艳星 | 一区二区三区中文字幕 | 日韩视频h | 国产综合在线观看 | 夜夜操影院 | 年代下乡啪啪h文 | 欧美 日韩 国产一区 | 东京热一区二区三区四区 | 一区三区在线观看 | 国产亚洲无码精品 | 在线不卡的av | 又黄又骚又爽 | avtt在线 | 成年人在线观看视频免费 | 好吊操视频这里只有精品 | 亚洲狠狠爱 | 精品成人18| 国产精品一区二区无码对白 | 国产黄色的视频 | 色人天堂| 国产成人精品无码免费看在线 | 久久免费小视频 | 亚洲嫩草影院 | 日韩精品在线免费观看 | 精品成人18 | 欧美深性狂猛ⅹxxx深喉 | 高跟肉丝丝袜呻吟啪啪网站av | 亚洲人成电影在线 | 久久久久久久9 | 极品销魂美女少妇尤物 | 国产裸体舞一区二区三区 | 91国产精品 | 国产又粗又猛又爽又黄的网站 | 中文字幕精品一区久久久久 | 亚洲无套| 中文字幕在线视频不卡 | 欧美日韩不卡 | 欧美视频在线一区二区三区 | 国产精品一页 |