![](/img/trans.png)
[英]Why doesn't DataInputStream continue to receive data after reading binary file
[英]readLine() from DataInputStream doesn't receive data correctly
我是Socket操作的新手,目前正在使用Java客戶端與C服務器進行通信,並且從服務器讀取數據時遇到了一些問題。
啟動服務器時,它會正確返回全部數據(我從Java客戶端發送SQL請求,但是每當嘗試使用DataInputStream從客戶端讀取SQL請求時,它都會返回該數據。
我基本上是想在啟動應用程序時在應用程序的右側顯示用戶名,向服務器發送SQL請求“ SELECT username FROM username WHERE status ='online'“,C服務器將發送以下響應:” Aoisuki AntoineLg”
當我嘗試使用readLine()讀取數據時; 在一段時間的循環中,我只顯示“ Aoisuki”用戶名。
我認為沒有必要向您展示我的C服務器代碼,因為我已經嘗試過使用C客戶端,並且一切正常。
因此,這是我來自客戶端的Java代碼:
public String recvMsg() throws IOException {
s = new Socket(addr,port);
din = new DataInputStream(s.getInputStream());
d = new BufferedReader(new InputStreamReader(din));
StringBuilder result = new StringBuilder();
String tmp = "";
try {
while(((tmp=d.readLine())!=null)){
result.append(tmp);
d.wait();
}
} catch(Exception e){
....
}
return result.toString();
}
我已經嘗試過在while循環之后放入“ d.wait()”,但是又遇到了另一個問題:我的客戶端直到服務器關閉后才啟動,但是我同時顯示了兩個用戶名(這就是我想要的)
任何幫助將非常感激。
wait
方法是每個java對象的一部分。 它是可一起工作的3個獨立事物的一部分: wait
方法, notify
方法和synchronized
關鍵字。
您不應該在這里稱呼它。 沒有理由在bufferedreader上調用它,因此您不應該在這里調用它。 d.readLine()
將阻止; 您可以刪除該行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.