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) {}
}
}
}
答案 0 :(得分:0)
至少在这一点上,如果您要对丢弃的某些异常进行printStackTrace,这可能会有所帮助。我知道在我的个人开发盒上,我通常在8080这样的端口上运行至少1个app服务器,而且我通常在端口80上运行Apache或IIS,所以如果其他东西已经绑定在端口上,那么异常将被第一次捕获(异常e)抛出并捕获。你可能会在关闭执行之前退出应用程序,因为我认为,Javadoc说调用没有返回,所以虽然这可能不是问题,因为你正在抛出线程,你可能有你自己的线程阻止其他联系,虽然我真的怀疑,它可能是那些“由实施者决定的行为”之一。