2014-10-12 150 views
0
package server; 

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


public class TCPServer { 
public static void main(String[] args) throws IOException { 
    ServerSocket serverSocket =null; 
    Socket socket; 
    boolean listening = true; 

    try { 
     serverSocket = new ServerSocket(4444); 

    } catch (IOException e) { 
     System.err.println("Cannot listen on port: 4444."); 
    } 

    while (listening){ 
     socket = serverSocket.accept(); 
    new TCPServerThread(socket).start(); 
    } 
    serverSocket.close(); 
} 

}
這個代碼給出了這樣的錯誤ServerSocket的構造函數拋出異常

Cannot listen on port: 4444. 
Exception in thread "main" java.lang.NullPointerException 
    at server.TCPServer.main(TCPServer.java:20) 
+5

您正在捕捉異常;你爲什麼不檢查它的內容? – 2014-10-12 10:03:08

+1

4444端口可能被其他應用程序檢查用於該應用程序或停用該應用程序。 – Divya 2014-10-12 10:03:38

+0

1.當出現異常時,不要只打印一些自己設計的消息。打印異常附帶的消息:它會告訴你什麼是錯的。目前,你只是問我們你自己的信息的意義。我們不知道比你更多。畢竟,這是你的信息。 2.取決於try塊中代碼成功的代碼應位於同一個try塊中,而不是在catch塊之後。不要這樣寫代碼。 – EJP 2014-10-12 10:56:05

回答

0

你應該移動接受循環try塊內。因爲這種方式如果ServerSocket無法監聽您的變量serverSocket將爲空。

package server; 

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

public class TCPServer { 
    public static void main(String[] args) throws IOException { 
     ServerSocket serverSocket =null; 
     Socket socket; 
     boolean listening = true; 

     try { 
      serverSocket = new ServerSocket(4444); 
      while (listening){ 
       socket = serverSocket.accept(); 
       new TCPServerThread(socket).start(); 
      } 
     serverSocket.close(); 
     } catch (IOException e) { 
      System.err.println("Cannot listen on port: 4444."); 
      e.printStackTrace(); 
     } 
    } 

請注意我如何加入e.printStackTrace()到您的catch塊應包含在應用程序爲什麼不聽的端口4444很可能已經不同的應用程序正在監聽此端口的詳細信息。

0

是的,我不知道它爲什麼會拋出NullPointerException,但是當我調試並檢查異常詳細信息時,它是BindException,因爲端口已被使用。

相關問題