一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java socket長連接中解決read阻塞的3個辦法

java socket長連接中解決read阻塞的3個辦法

2019-11-26 15:05junjie JAVA教程

這篇文章主要介紹了java socket長連接中解決read阻塞的3個辦法,本文取了折中的一個方法,并給出代碼實例,需要的朋友可以參考下

解決的方法有3個 :

1 約定發送的數據長度,比如 http的 keepAlive 就是必須依賴這個的 Content-Length
2 設置超時的時間,根據我的經驗,只有在Socket級別設置才有效.

復制代碼 代碼如下:
Socket socket = new Socket(host,port);
socket.setSoTimeout(100); // 如果超過100毫秒還沒有數據,則拋出 SocketTimeoutException

3 讓發送端發送完數據后,關閉連接。 這個在Http的操作時很常見。

 

(InputStream如何判斷數據已經讀取結束)

某些時候無法修改客戶端的情況下情況一就只有pass掉了,情況二相對來說比較適合,當阻塞后直接拋出一個異常。情況三不適合長連接,因為整個通信過程中鏈路是不能中斷的,也不能調shutdown結束。其實還有第四種方法:當讀取到某些字符就不在往下讀取了,比如讀取到byebye就break。但是這也需要改客戶端代碼。選了一種折中的辦法-設置超時:

?
1
2
3
4
5
6
7
8
9
10
11
12
StringBuilder sb = new StringBuilder();
try {
  client.setSoTimeout(500);
  while ((a = client.getInputStream().read(buf)) != -1) {
    sb.append(new String(buf, 0, a));
    if (a != size) {
      break;
    }
  }
} catch (Exception e) {
}
System.out.println(sb);

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品免费视频一区一 | 国产午夜精品一区二区 | 暖暖的韩国免费观看 | 亚洲婷婷在线视频 | 男女车车好快的车车免费网站 | 天堂在线观看中文字幕 | 金发美女与黑人做爰 | 微拍秒拍99福利精品小视频 | 给我一个黄色网址 | 亚洲AV久久无码精品九号 | 扒开放荡老师裙子猛烈的进入 | 亚洲狠狠网站色噜噜 | 免费观看在线永久免费xx视频 | 亚洲第一免费播放区 | 石原莉奈被店长侵犯免费 | 美味情缘韩国在线观看视频 | 免费99精品国产自在现线 | 和肥岳在厨房激情 | 国产亚洲综合久久 | 国产精品国产精品国产三级普 | 日韩在线观看一区二区不卡视频 | 日韩伦理在线观看 | 学校女性奴sm训练调教 | ai换脸明星造梦工厂忘忧草 | 天天色影视综合网 | 日韩在线一区二区三区免费视频 | 好涨好爽好大视频免费 | 久久亚洲精品AV无码四区 | 色综合久久天天综合 | 四虎884aa永久播放地址http | 男人v天堂 | 国产成人亚洲影视在线 | 黑人双渗透 | 国产麻豆传媒在线观看 | 九九精品视频在线免费观看 | 福利视频一区青娱 | 午夜精品久久久久久久99蜜桃 | 好大好爽好硬我要喷水了 | 国产精品aaa | 2019自拍偷拍视频 | 变形金刚第一部 |