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

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

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久久久久久久 | 亚洲福利一区二区 | 国产高清在线精品一区二区 | 午夜精品在线视频 | 精品久久久麻豆国产精品 | haodiaocao几万部精彩视频 | 太紧太深了受不了黑人 | 午夜国产| 美女脱衣有肉 | narutotsunade全彩雏田 | 色老妇| 2021精品国夜夜天天拍拍 | 国产精品久久免费观看 | 2018av在线 | 午夜香蕉成视频人网站高清版 | 午夜精品久久久久久久99 | 本土自拍 | 跪在老师脚下吃丝袜脚 | 全彩调教侵犯h本子全彩妖气he | 欧美调教打屁股spank视频 | 久久久久久久99精品免费观看 | 我被黄总征服的全过程 | 国产日产欧产精品精品软件 | 1024国产看片在线观看 | 免费一级欧美片在线观看 | 双性np玩烂了np欲之国的太子 | 亚洲aⅴ男人的天堂在线观看 | 天天操天天射天天爽 | 国产在线看片护士免费视频 | 91久久99热青草国产 | 亚洲国产在线播放 | 日韩欧美亚洲天堂 | 小鸟酱视频在线观看 | 男人天堂中文字幕 | 亚洲AV蜜桃永久无码精品无码网 | 门房秦大爷最新章节阅读 |