![](/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.