2011-05-04 110 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说该调用不会返回,所以虽然这可能不是问题,但由于您正在抛出线程,因此可能会有自己的线程阻止其他连接,但我真的怀疑,它可能是那些“由实施者”确定的行为类型之一。

相关问题