来自DataInputStream的readLine()无法正确接收数据

时间:2019-01-07 15:49:37

标签: java tcp server client

我是Socket操作的新手,我目前正在使用Java客户端与C服务器进行通信,但是从服务器读取数据时遇到了一些问题。

启动服务器时,它会正确返回全部数据(我正在从Java客户端发送SQL请求,但是每当尝试使用DataInputStream从客户端读取SQL请求时。

我基本上是想在启动应用程序时在应用程序的右侧显示用户名,向服务器发送SQL请求“ SELECT username FROM username WHERE status ='online'”,C服务器使用以下命令发送响应: : “青月 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()”,但是又遇到了另一个问题:我的客户端直到服务器关闭后才启动,但是我同时显示了两个用户名(这就是我的意思)想要)

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

wait方法是每个java对象的一部分。它是3个相互配合的东西之一:wait方法,notify方法和synchronized关键字。

您不应该在这里称呼它;没有理由在bufferedreader上调用它,因此您不应该在这里调用它。 d.readLine()将阻止;您可以删除该行。