![](/img/trans.png)
[英]Java server/client application only displays messages upon pressing enter
[英]Server Client in Java only displays message when I press enter
我有此服务器和客户端代码。 如果我从服务器向客户端发送消息,除非我先向客户端发送消息或按回车键,否则它将不会显示,如果尝试其他方法,则会出现相同的问题。 我怎样才能解决这个问题?
服务器:
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();
//////////////////////////////////////////
}
顺便说一句,我建议您阅读此链接中的聊天应用程序示例: http : //cs.lmu.edu/~ray/notes/javanetexamples/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.