2016-04-21 97 views
0

我正在學習Java套接字編程,而且我非常積極,我的代碼是正確的,但由於某種原因服務器和客戶端不通信。我不太確定他們是否連接。這是我迄今爲止所做的。Java客戶端/服務器套接字問題

服務器:

public static void main(String[] args) throws Exception 
{ 
    Main_Server server = new Main_Server(); 
    server.run(); 
} 

public void run() throws Exception 
{ 
    ServerSocket server = new ServerSocket(444); //Port 
    Socket sSocket = server.accept(); 

    BufferedReader bfr = new BufferedReader(new InputStreamReader(sSocket.getInputStream())); 

    String clientMessage = bfr.readLine(); 
    System.out.println("Client: "+clientMessage); 

    if (clientMessage != null) 
    { 
     PrintStream ps = new PrintStream(sSocket.getOutputStream()); 
     ps.println("Message Received."); 
    } 
} 

客戶:

public static void main(String[] args) throws Exception 
{ 
    Client_One client = new Client_One(); 
    client.run(); 
} 

public void run() throws Exception 
{ 
    Socket clientSocket = new Socket("localhost", 444); 

    PrintStream ps = new PrintStream(clientSocket.getOutputStream()); 
    ps.println("Hello, server."); 

    BufferedReader bfr = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
    String serverMessage = bfr.readLine(); 
    System.out.println("Server: "+serverMessage); 
} 

於是我運行服務器和第一客戶端後(我目前使用NetBeans IDE 8.1)。程序運行,只是坐在那裏,但之後沒有任何反應。爲什麼是這樣?我只有兩個空的控制檯。 謝謝你的時間。

+0

看起來乍一看。 444是一個特權端口號,使用大於1023的端口來確保這不是問題。 (Davide的答案聽起來像是一個可能的解決方案。) – markspace

+0

@markspace謝謝你,我已經嘗試了4444。但再次感謝您的提示:) –

回答

0

如果您使用緩衝區,您需要flush it或close它,否則如果緩衝區未滿,數據將保留在緩衝區中。關閉它也可以,因爲從javadoc中可以看到關閉一個流也會刷新它。

從OutputStream中的javadoc你可以看到什麼清洗手段:

刷新此輸出流,並勢力任何緩衝的輸出字節被寫出

注意:還記得當你完成使用它們時關閉輸入和輸出流,否則你仍然沒有正確地關閉使用內存的資源。

+0

非常感謝!真正有用的先生:) –

相關問題