簡體   English   中英

DataInputStream的readLine()無法正確接收數據

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

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