2011-05-04 161 views
0
package server; 

import java.net.*; // for network 
import java.util.*; // for utilities 
import java.io.*; // for streams 

import server.ex12ClientThread; 


public class ex12Server implements ex12Constants 
{ 

    public static void main(String args[]) 
    { 

int well_known_port  = SERVERPORT; // default port value 
     ServerSocket serverSock = null; 

     ex12ClientThread thread = null; 

     try { // to get a port number 
      if (args.length > 0) 
      { 
       well_known_port = Integer.parseInt(args[0]); 
         //initialises port number to connect to 
      } 

     } catch (NumberFormatException e) {} // do nothing accept default. 

     try 
     { 


      serverSock = new ServerSocket(well_known_port, 10) ; 


      // information to log file (ie screen) 
      System.out.println("ServerSocket " + serverSock.toString()); 
      System.out.println("Entering server loop"); 



      while(true) // Main Server loop 
      { 
       Socket clientSocket = serverSock.accept(); 

       thread = new ex12ClientThread(clientSocket); 
           thread.setDaemon(true); 
       thread.start(); 



         } 

       } catch(Exception e) 
{ 
      System.err.println("Socket Error!!!.") ; 
      System.exit(1) ; 
     } 
     finally 
       { 
        try 
        { 
         serverSock.close(); 
        } 
        catch (IOException e) {} 
       } 
    } 
} 
+2

請包括任何_exceptions_被引發或_console output_ – mre 2011-05-04 13:36:07

回答

0

至少在這一點上,如果您要對某些拋棄的異常執行printStackTrace,可能會有幫助。我知道在我的個人開發箱中,我通常在像8080這樣的端口上運行至少1個應用程序服務器,並且我通常在端口80上運行Apache或IIS,所以如果其他端口已經綁定了端口,異常將被拋出並被第一次捕獲(例外e)。在關閉執行程序之前,您可能會退出應用程序,因爲我認爲Javadoc說該調用不會返回,所以雖然這可能不是問題,但由於您正在拋出線程,因此可能會有自己的線程阻止其他連接,但我真的懷疑,它可能是那些「由實施者」確定的行爲類型之一。

相關問題