2014-04-23 23 views
0

我正在學習java。我試圖製作一個簡單的客戶端/服務器聊天系統。我到目前爲止是一個程序,其中服務器通過爲每個客戶端分配一個單獨的線程來接受多個客戶端連接。(Java)讓兩個線程在運行時彼此通信?

我現在的問題是,我無法弄清楚如何從一個客戶端獲得輸入,再有它可以在所有客戶端的發送,因此基本上有一個非常非常簡單的聊天機械師。我將如何去完成這件事?更簡單的方法是什麼?

我的代碼到目前爲止;

class Client { 
    public static void main(String argv[]) throws Exception { 
    String sentMessage; //variable for input 
    String receivedMessage; //variable for output 
    String status; 
    boolean running; 

    BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); 

    Socket clientSocket = new Socket("127.0.0.1", 5622); //name of computer to connect with and port number to use 

    DataOutputStream outToServer = 
     new DataOutputStream(clientSocket.getOutputStream()); 
    BufferedReader inFromServer = 
     new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

    System.out.println("Client Side\n"); 

    running = true; 

    while(running) 
    { 
     sentMessage = inFromUser.readLine(); //user inputs text to variable 'xInput'      

     outToServer.writeBytes(sentMessage + '\n'); //the variable is sent to the server 

     status = inFromServer.readLine(); 


     System.out.println("FROM SERVER: " + status); //display to user 
    }  
    clientSocket.close();  
    } 
} 

服務器代碼。

class Server { 

    public static void main(String argv[]) throws Exception { 
    String clientMessage;  

    boolean listening = true; 
    int portNumber = 5622; 

    try (ServerSocket serverSocket = new ServerSocket(portNumber)) { 
     while (listening) { 
      new ServerThread(serverSocket.accept()).start(); 
     } 
    } catch (IOException e) { 
     System.err.println("Could not listen on port " + portNumber); 
     System.exit(-1); 
    } 
    } 
} 

處理客戶端連接的線程。

public class ServerThread extends Thread { 
private Socket socket = null; 

public ServerThread(Socket socket) { 
    super("ServerThread"); 
    this.socket = socket; 
} 

public void run() { 

    int msgCnt = 0; 

    try (
     PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(
      new InputStreamReader(
       socket.getInputStream())); 
    ) { 
     //something needs to go here 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

始終把相關代碼** **中的問題,不只是鏈接。鏈接腐爛,人們不應該離開現場去幫助你。 –

+0

啊,對不起。我不知道這麼多的代碼是否會讓帖子太長。 – user3562306

+0

我認爲這裏已經有很多關於這個的話題。怎麼樣[這](http://stackoverflow.com/questions/19378748/simple-chat-using-socket-connection?rq=1),例如? – eis

回答