Java中的服务器客户端仅在我按enter键时显示消息
我有这个服务器和客户端代码。如果我从服务器向客户机发送消息,除非我先向客户机发回消息或按enter键,否则不会显示该消息,当我尝试另一种方法时,同样的问题也会发生。我怎样才能解决这个问题 服务器:Java中的服务器客户端仅在我按enter键时显示消息,java,Java,我有这个服务器和客户端代码。如果我从服务器向客户机发送消息,除非我先向客户机发回消息或按enter键,否则不会显示该消息,当我尝试另一种方法时,同样的问题也会发生。我怎样才能解决这个问题 服务器: public static void main(String[] args) throws Exception { ServerSocket sersock = new ServerSocket(3000); System.out.println("Server
public static void main(String[] args) throws Exception {
ServerSocket sersock = new ServerSocket(3000);
System.out.println("Server ready for chatting");
Socket sock = sersock.accept(); // reading from keyboard (keyRead object)
BufferedReader keyRead = new BufferedReader(new InputStreamReader(System.in)); // sending to client (pwrite object)
OutputStream ostream = sock.getOutputStream();
PrintWriter pwrite = new PrintWriter(ostream, true); // receiving from server ( receiveRead object)
InputStream istream = sock.getInputStream();
BufferedReader receiveRead = new BufferedReader(new InputStreamReader(istream));
String receiveMessage, sendMessage;
GossipServer gs = new GossipServer();
gs.initalisePieces();
gs.displayBoard(pwrite);
pwrite.println("Welcome to my Chess Game - Designed by Robbie Singh");
while (true) {
if ((receiveMessage = receiveRead.readLine()) != null) {
System.out.println(receiveMessage);
}
sendMessage = keyRead.readLine();
pwrite.println(sendMessage);
pwrite.flush();
}
}
public static void main(String[] args) throws Exception {
Socket sock = new Socket("127.0.0.1", 3000); // reading from keyboard (keyRead object)
BufferedReader keyRead = new BufferedReader(new InputStreamReader(System.in)); // sending to client (pwrite object)
OutputStream ostream = sock.getOutputStream();
PrintWriter pwrite = new PrintWriter(ostream, true); // receiving from server ( receiveRead object)
InputStream istream = sock.getInputStream();
BufferedReader receiveRead = new BufferedReader(new InputStreamReader(istream));
System.out.println("Welcome to my Chess Game - Designed by Robbie Singh");
String receiveMessage, sendMessage;
while (true) {
sendMessage = keyRead.readLine(); // keyboard reading
pwrite.println(sendMessage); // sending to server
pwrite.flush(); // flush the data
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try{
System.out.println(receiveRead.readLine());
}catch(Exception e){}
}
}, 0, 5000);
}
}
}
客户端:
public static void main(String[] args) throws Exception {
ServerSocket sersock = new ServerSocket(3000);
System.out.println("Server ready for chatting");
Socket sock = sersock.accept(); // reading from keyboard (keyRead object)
BufferedReader keyRead = new BufferedReader(new InputStreamReader(System.in)); // sending to client (pwrite object)
OutputStream ostream = sock.getOutputStream();
PrintWriter pwrite = new PrintWriter(ostream, true); // receiving from server ( receiveRead object)
InputStream istream = sock.getInputStream();
BufferedReader receiveRead = new BufferedReader(new InputStreamReader(istream));
String receiveMessage, sendMessage;
GossipServer gs = new GossipServer();
gs.initalisePieces();
gs.displayBoard(pwrite);
pwrite.println("Welcome to my Chess Game - Designed by Robbie Singh");
while (true) {
if ((receiveMessage = receiveRead.readLine()) != null) {
System.out.println(receiveMessage);
}
sendMessage = keyRead.readLine();
pwrite.println(sendMessage);
pwrite.flush();
}
}
public static void main(String[] args) throws Exception {
Socket sock = new Socket("127.0.0.1", 3000); // reading from keyboard (keyRead object)
BufferedReader keyRead = new BufferedReader(new InputStreamReader(System.in)); // sending to client (pwrite object)
OutputStream ostream = sock.getOutputStream();
PrintWriter pwrite = new PrintWriter(ostream, true); // receiving from server ( receiveRead object)
InputStream istream = sock.getInputStream();
BufferedReader receiveRead = new BufferedReader(new InputStreamReader(istream));
System.out.println("Welcome to my Chess Game - Designed by Robbie Singh");
String receiveMessage, sendMessage;
while (true) {
sendMessage = keyRead.readLine(); // keyboard reading
pwrite.println(sendMessage); // sending to server
pwrite.flush(); // flush the data
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try{
System.out.println(receiveRead.readLine());
}catch(Exception e){}
}
}, 0, 5000);
}
}
}
这就是在服务器端等待主循环中的键盘输入的方式
while (true)
{
if ((receiveMessage = receiveRead.readLine()) != null)
{
System.out.println(receiveMessage);
}
//PUT THESE LINE IN OTHER THREAD AND SHOULD FIX THE PROBLEM
sendMessage = keyRead.readLine();
pwrite.println(sendMessage);
pwrite.flush();
//////////////////////////////////////////
}
顺便说一下,我建议您阅读以下链接中的聊天应用程序示例: