簡體   English   中英

從Java中的客戶端套接字讀取數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM