簡體   English   中英

當我按Enter鍵時,Java中的Server Client僅顯示消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM