2014-12-13 162 views
0

我是新來的java。我正在使用NetBeans 8.0.2 我開始了一個新項目(Java - > Java Class Libary) 我已經放了兩個類並運行我的代碼。然而,沒有錯誤,在成功構建項目之後沒有輸出。聊天服務器客戶端輸出

我真的很感謝你的幫助。

我的第一堂課是ChatServer &我的第二個是ClientServer!

import java.net.*; 
import java.io.*; 

public class ChatServer 
{ private Socket   socket = null; 
    private ServerSocket server = null; 
    private DataInputStream streamIn = null; 

    public ChatServer(int port) 
    { try 
     { System.out.println("Binding to port " + port + ", please wait ..."); 
     server = new ServerSocket(port); 
     System.out.println("Server started: " + server); 
     System.out.println("Waiting for a client ..."); 
     socket = server.accept(); 
     System.out.println("Client accepted: " + socket); 
     open(); 
     boolean done = false; 
     while (!done) 
     { try 
      { String line = streamIn.readUTF(); 
       System.out.println(line); 
       done = line.equals(".bye"); 
      } 
      catch(IOException ioe) 
      { done = true; 
      } 
     } 
     close(); 
     } 
     catch(IOException ioe) 
     { System.out.println(ioe); 
     } 
    } 
    public void open() throws IOException 
    { streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream())); 
    } 
    public void close() throws IOException 
    { if (socket != null) socket.close(); 
     if (streamIn != null) streamIn.close(); 
    } 
    public static void main(String args[]) 
    { ChatServer server = null; 
     if (args.length != 1) 
     System.out.println("Usage: java ChatServer port"); 
     else 
     server = new ChatServer(Integer.parseInt(args[0])); 
    } 
} 

import java.net.*; 
import java.io.*; 

public class ChatClient 
{ private Socket socket    = null; 
    private DataInputStream console = null; 
    private DataOutputStream streamOut = null; 

    public ChatClient(String serverName, int serverPort) 
    { System.out.println("Establishing connection. Please wait ..."); 
     try 
     { socket = new Socket(serverName, serverPort); 
     System.out.println("Connected: " + socket); 
     start(); 
     } 
     catch(UnknownHostException uhe) 
     { System.out.println("Host unknown: " + uhe.getMessage()); 
     } 
     catch(IOException ioe) 
     { System.out.println("Unexpected exception: " + ioe.getMessage()); 
     } 
     String line = ""; 
     while (!line.equals(".bye")) 
     { try 
     { line = console.readLine(); 
      streamOut.writeUTF(line); 
      streamOut.flush(); 
     } 
     catch(IOException ioe) 
     { System.out.println("Sending error: " + ioe.getMessage()); 
     } 
     } 
    } 
    public void start() throws IOException 
    { console = new DataInputStream(System.in); 
     streamOut = new DataOutputStream(socket.getOutputStream()); 
    } 
    public void stop() 
    { try 
     { if (console != null) console.close(); 
     if (streamOut != null) streamOut.close(); 
     if (socket != null) socket.close(); 
     } 
     catch(IOException ioe) 
     { System.out.println("Error closing ..."); 
     } 
    } 
    public static void main(String args[]) 
    { ChatClient client = null; 
     if (args.length != 2) 
     System.out.println("Usage: java ChatClient host port"); 
     else 
     client = new ChatClient(args[0], Integer.parseInt(args[1])); 
    } 
} 
+0

你用命令行參數運行它嗎? – 2014-12-13 11:31:13

+0

也許你不應該創建一個「Java Class Libary」,而應該創建一個「Java Application」。顧名思義,它是一個可供其他應用程序使用的庫,而不是應用程序本身。 – BDL 2014-12-13 11:32:33

+0

正如我所說我是新來的java所以什麼是命令行! – user4347547 2014-12-13 11:47:10

回答

0

您需要同時運行ChatClient和的ChatServer(因此這兩類主要的方法)。 此外,您需要傳遞命令行參數。讓我們來看看在main()ChatClient

public static void main(String args[]) 
    { ChatClient client = null; 
     if (args.length != 2) 
     System.out.println("Usage: java ChatClient host port"); 
     else 
     client = new ChatClient(args[0], Integer.parseInt(args[1])); 
    } 

你解析參數檢索服務器名稱和端口。這與合適的參數運行這些類的一個例子:

java ChatServer 55444 
java ChatClient 127.0.0.1 55444 

Here是一個簡短的教程覆蓋在NetBeans IDE設定命令內襯參數的問題。

另外,正如@BDL指出的那樣,您最好創建一個New Project而不是java庫(或者分別爲服務器和客戶端分別創建兩個項目)。