我是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()”,但是又遇到了另一个问题:我的客户端直到服务器关闭后才启动,但是我同时显示了两个用户名(这就是我的意思)想要)
任何帮助将不胜感激。
答案 0 :(得分:0)
wait
方法是每个java对象的一部分。它是3个相互配合的东西之一:wait
方法,notify
方法和synchronized
关键字。
您不应该在这里称呼它;没有理由在bufferedreader上调用它,因此您不应该在这里调用它。 d.readLine()
将阻止;您可以删除该行。