这是我的问题,有一个服务器和客户端类通过2个线程通信(MsgWriter和MsgReader)
要在流中读取和写入输入,我使用扫描器。它可以工作,但是扫描器需要输入两次才能继续。
例如:我写了一条信息你的留言:一条短信。
所以我想在我按回车键后发送消息但是我必须再按一次回车键才能发送文本。
对不起,我不太会解释。然而,这里是MsgWriter线程的代码public class MsgWriter extends Thread {
private Socket s;
private Buffer buffer = new Buffer();
public MsgWriter(Socket s) {
this.s = s;
}
public void run() {
String message = "";
BufferedReader br = null;
boolean end = false;
while(!end){
try{
synchronized (buffer) {
while (!buffer.isEmpty()) {
buffer.wait();
}
//buffer.put(s);
OutputStream out = s.getOutputStream();
PrintStream writer = new PrintStream(out);
Scanner input = new Scanner(System.in);
input.useDelimiter("n");
if (input.nextLine().equals("")){
System.out.println("Your message: ");
message = input.next();
br = new BufferedReader(new StringReader(message));
if (input.hasNext("x")) {
br = new BufferedReader(new StringReader("Good Bye"));
end = true;
}
message = br.readLine();
writer.println(message);
System.out.println("-------------------------------");
}
buffer.notifyAll();
}
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}
}
和输出
ServerIP: localhost或127.0.0.1端口号:56763++连接到服务器
你的信息:你好,服务器
Received: hi client
如果你也需要MsgReader线程的代码,请告诉我。
您有这行if (input.nextLine().equals(""))
查找空字符串输入,这就是您的代码等待第二次'Enter'按下的原因。为什么在代码中需要这样做?