[英]Read data from a client socket in Java
我已經編寫了用於從客戶端套接字發送/接收數據的代碼。 發送數據步驟已成功完成,但是當我想從套接字讀取數據時, readLine()
方法將阻止程序,而沒有要讀取的數據。
這是我的代碼:
StringBuffer document = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null)
document.append(line + "\n");
reader.close()
非常感謝,我可以讀取所有接收到的數據,但是readLine或read(byte [],int,int)方法在沒有要讀取的數據時會阻止程序,而此時此方法必須返回null / -1。
那是因為readLine()
函數是一個阻塞調用,所以它當然會阻塞。
為了更具建設性,對readLine()
類的方法的調用應位於單獨的線程中,以使阻塞調用不會影響代碼的其余部分。 從正在讀取的類中,我建議創建一個純粹用於控制從套接字讀取的線程。
我將傳遞對創建類的引用,以便如果線程接收信息,則父類可以使用它。
BufferedReader有一個名為“ ready()”的方法,當准備好接收數據時該方法返回true。 如果不想在“ readLine()”調用中被阻止,請首先檢查是否准備好讀取數據。
看一下文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.