1. 程式人生 > >Java避免Socket的read等阻塞操作無限等待

Java避免Socket的read等阻塞操作無限等待

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

2)傳送資料時,約定資料的首部固定位元組數為資料長度。這樣讀取到這個長度的資料後,就不繼續呼叫read方法。

3)為了防止read操作造成程式永久掛起,還可以給socket設定超時。
如果read()方法在設定時間內沒有讀取到資料,就會丟擲一個java.net.SocketTimeoutException異常。
例如下面的方法設定超時3秒。
socket.setSoTimeout(3000);

相關推薦

Java避免Socket的read阻塞操作無限等待

1)傳送完後呼叫Socket的shutdownOutput()方法關閉輸出流,這樣對端的輸入流上的read操作就會返回-1。 注意不能呼叫socket.getInputStream().close()。這樣會導致socket被關閉。 當然如果不需要繼續在

java】【mybatis】在使用mybatis進行批量插入,批量更新批量操作時,切割In集合List進行分批批量操作java中的切割代碼

lse span ati 批量更新 次數 sublist 調用 size ==       紅字部分代表mybatis的批量操作調用方法:       int num = 0; int maxLength = 200; in

java匯入excle表格,並且對錶格進行相應的修改,並對錶格資料進行整理,最後匯出本地表格一系列操作

1.首先建立一個java專案 2.匯入以下jar包 3.程式碼如下   public class auto_date { private static List<List<String>> readExcel(File file) throws Exception

java導入excle表格,並且對表格進行相應的修改,並對表格數據進行整理,最後導出本地表格一系列操作

對象 tabs stream span 指數 ring vat 14. int 1.首先創建一個java項目 2.導入以下jar包 3.代碼如下 public class auto_date { private static List<List<Strin

java平衡二叉樹的增加刪除基本操作和程式碼實現

陣列為{1,2,3}型別的 五種型別四種調整 一、LL型: /** * 帶左子樹旋轉,適用於LL型 */ public static AvlNode rotateWithLeftChild(AvlNode n) { AvlNode k = n.left; n.left

Selenium+java 點選登入常見操作

繼續上篇環境搭建的操作和開啟網頁操作之後 ,本篇記錄登入等基本操作 直接上程式碼: try { driver.findElement(By.id("tname")).sendKeys("xxx");//輸入賬號       &nb

Java.awt.Robot 控制滑鼠移動、鍵盤按鍵輸入操作

Java提供的Robot類,實現了控制滑鼠、鍵盤的操作,通過它,你就可以使用程式碼來控制滑鼠移動、滑鼠按鍵、鍵盤按鍵等各種各樣你希望電腦做的操作,可以用來自動化測試等目的。 是不是很酷~~~ 匯入的包有: import java.awt.AWTException; imp

【線性表基礎】順序表和單鏈表的插入、刪除基本操作Java版】

本文表述了線性表及其基本操作的程式碼【Java實現】 參考書籍 :《資料結構 ——Java語言描述》/劉小晶 ,杜選主編 線性表需要的基本功能有:動態地增長或收縮;對線性表的任何資料元素進行訪問和查詢;線上性表中的任何位置進行資料元素的插入和刪除操作;求線性表中指定資料元素的前驅和後繼等等。 首先描述線性表的

DB2 建表,添加字段,刪除字段,修改字段常用操作

varchar 查看 ble col har 同時 int 添加 建數據庫 轉載:http://blog.sina.com.cn/s/blog_67aaf4440100v01p.html,稍作修改。 --創建數據庫 create database Etp; --連接數據庫

Java Calendar 類的時間操作

highlight trac string img sni gettime rfc sim design Java Calendar 類時間操作,這也許是創建和管理日歷最簡單的一個方案,示範代碼很簡單。 演示了獲取時間,日期時間的累加和累減,以及比較。 原文地址:blo

java程序、JVM、操作系統之間的

jvm本文出自 “屌絲逆襲” 博客,請務必保留此出處http://5731674.blog.51cto.com/5721674/1928297java程序、JVM、操作系統之間的

四:Java之字符串操作String、StringBuffer和StringBuilder

equal const wstring str asi 有時 string對象 階段 stringbu string是我們經經常使用到的一個類型,事實上有時候認為敲代碼就是在重復的操作字符串,這是C的特點,在java中。jdk非常好的封裝了關於字符串的操

CentOS 6.9之LVM創建,擴容常用操作

linux lvm 卷 分區 擴容 在系統安裝時候大多情況下有可能因為考慮不周,導致服務器空間不足問題,這時候如果沒有lvm邏輯卷管理工具的話,往往就是查找服務器大文件刪除之,或者應用遷移。但如果有了lvm邏輯卷管理,只需要新增硬盤,並將新硬盤的空間劃分到不足的分區及可,如果空間浪

Android nomedia 避免圖片資源泄露在系統圖庫其中

cep wid 收錄 rac csdn eat 文件夾 nts 應用開發 總結 Android nomedia 避免文件泄露在系統圖庫和系統鈴聲中 在應用開發中 項目的圖片總是被系統的圖庫收錄了 避免圖片被系統圖庫收錄的發現有2個方法 第一種針對圖

selenium測試(Java)-- 一組元素操作(十一)

tro itl gen () utf-8 oot clas color doctype 利用下面的例子來編寫測試腳本 頁面代碼: <!DOCTYPE html> <html> <head> <meta http-equiv="c

java】對數據庫操作的那些事(包含數據庫中的預處理)

exception main exc 獲取 bat dba else .class 可維護 一、連接問題 前面剛介紹了怎麽連接數據庫,也寫了對應的模板。可是它的可維護性很差。那麽怎麽解決問題呢? 首先寫一個配置文件jdbc.properties <s

java與javascript對cookie操作的工具類

check cells ram tco expire turn get servle request Java對cookie的操作 package cn.utils; import java.util.HashMap; import java.util.Map;

java 文件讀寫操作】 生成隨機數,寫入txt,然後從txt中讀出

進行 rac 直接 生成隨機數 catch trace buffered 代碼 tac 1.把生成的隨機數寫入到文件中 1 public static void WriterFun(){ 2 //獲得路徑 3 String filep

Java中Properties類的操作

文件中 配置文件 所有 技術分享 set nbsp str 宋體 java Java中有個比較重要的類Properties(Java.util.Properties),主要用於讀取Java的配置文件,就是像讀取數據庫賬號密碼一樣,其配置文件常為.properties文件,格

selenium-java,解決一些加了顯性等待和隱性等待都不好使的情況,以及給UI自動化加上暫停功能

event until rdo 暫停 ati ntop 面板 -1 不想 最近在UI自動化時遇到了,上一步成功操作後沒有響應的情況(動畫加載和瀏覽器加載導致實際沒有問題),導致下一步無法成功操作,所有想在嘗試2次操作後再次進行上一步操作解決這種情況導致的錯誤(其實是不想每一