2017-10-17 87 views
-3

我試圖製作一個服務器,可以發送和接收消息給多個客戶端。但我有問題,即客戶端甚至不發送消息到我想要的服務器。我沒有添加服務器的寫入部分,我現在只是試圖讓服務器從客戶端讀取消息。謝謝你的幫助。這裏是我的服務器和我的客戶:Java聊天服務器,可以讀取和寫入消息

public class Main { 


public static ArrayList<PrintWriter> writers = new ArrayList<PrintWriter>(); 
public static void main(String[] args) { 
    try { 
     ServerSocket sock = new ServerSocket(9898); 
     while (true) { 
      try { 
       Socket client = sock.accept(); 
       PrintWriter writer = new PrintWriter(client.getOutputStream()); 
       writers.add(writer); 
       Thread t = new Thread(new Handler(client)); 
       t.start(); 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    System.out.println("Server Started"); 
} 

}

public class Handler implements Runnable { 
private Socket client; 

public Handler(Socket client) { 
    this.client = client; 
} 
@Override 
public void run() { 
    try { 
     //Streams--------------------------------- 
     OutputStream out = client.getOutputStream(); 
     PrintWriter writer = new PrintWriter(out); 

     InputStream in = client.getInputStream(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
     //---------------------------------------- 


     String s = null; 
     while(true) { 
      if((s=reader.readLine()) != null) { 
     }  System.out.println(s); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

}

公共類管理實現Runnable {

Socket sockel; 
String pcname = System.getProperty("user.name"); 
BufferedReader reader; 
PrintWriter writer; 
@Override 
public void run() { 
    try { 
     sockel = new Socket("localhost", 9898); 
     //Streams 
     reader = new BufferedReader(new InputStreamReader(sockel.getInputStream())); 
     writer = new PrintWriter(sockel.getOutputStream()); 
     //-------------- 
     System.out.println("Connected to: " + sockel.getInetAddress()); 
     writer.write("hello"); 
     writer.flush(); 
     System.out.println("here"); 
     String command = reader.readLine(); 
     while(!command.equalsIgnoreCase("close" + pcname)) { 
      System.out.println("Got Message: " + command); 
     } 
    }catch(IOException e) { 
     e.printStackTrace(); 
    } 
} 

}

+0

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建[mcve]。使用「編輯」鏈接來改善你的*問題* - 不要通過評論添加更多信息。謝謝! – GhostCat

+0

你有沒有例外? – Berger

+0

你就像「代碼不工作,這裏的代碼」...現在什麼?我們花時間閱讀您的代碼,或許正在運行,以確定*然後爲您解決問題是什麼問題?對不起,但這不是這個網站的工作原理。學習編程的整個想法是*花時間去理解問題並修復它們*。你正試圖把**所有這些麻煩的工作委託給其他人。並提示:* preview *功能存在的原因 - 以便您可以檢查您的輸入**的格式之前**發送給我們。 – GhostCat

回答

0

你沒有使用班級經理。 您必須創建兩個項目一個客戶端和另一個服務器並啓動服務器項目,然後啓動客戶端。

我希望這對你有所幫助。