2011-05-25 86 views
0

我有一台服务器将在另一台机器上运行,我需要使用两台不同的机器进行调试。有没有办法虚拟调试服务器,因为在我的机器上一切运行正常,但当我把它放在另一台机器上一切都错了?我没有拥有另一台机器(我只能托管并查看结果)。如何调试服务器

public class fss { public static void main(String[] args) throws IOException {   ServerSocket serverSocket = null;  boolean listening = true;  boolean allowed = true;   //  int port = Integer.parseInt(args[0]);  int port 
= 60000; 

    try { 

     serverSocket = new ServerSocket(port); 
    } catch (IOException e) { 
     System.out.println("Could not transmit on port: " + port); 
     System.exit(-1); 
    } 

    while (listening) { 

     //Take the ip of the client in number form 
     allowed = true; 
     Socket socket = serverSocket.accept(); 
     DataOutputStream outToClient = new DataOutputStream(socket.getOutputStream()); 
     String clientAddress = socket.getRemoteSocketAddress().toString(); 
     clientAddress = clientAddress.substring(1); 
     for (int i = 0; i < clientAddress.length() - 1; i++) { 
      if (clientAddress.substring(i, i + 1).equals(":")) { 
       clientAddress = clientAddress.substring(0, i); 
      } 
     } 

     File f = new File("forbidden.txt"); 
     if (f.exists()) { 
      BufferedReader forbidden = new BufferedReader(new FileReader("forbidden.txt")); 
      String addr; 
      while ((addr = forbidden.readLine()) != null) { 
       if (Character.isLetter(addr.charAt(0))) {//if the address is in a letter form 
        addr = InetAddress.getByName(addr).toString(); 
        for (int i = 0; i < addr.length() - 1; i++) { 
         //System.out.println(addr.substring(i, i + 1)); 
         if (addr.substring(i, i + 1).equals("/")) { 
          addr = addr.substring(i + 1); 
         } 
        } 
       } 
       if (clientAddress.equals(addr)) { 
        allowed = false; 
        break; 
       } 

      } 
      if (allowed == true) { 
       new MultiThread(socket).start(); 
      } else { 
       outToClient.writeBytes("Connection refused" + "\n"); 
       socket.close(); 
       forbidden.close(); 
      } 
     } else { 
      new MultiThread(socket).start(); 
     } 
    } 
    serverSocket.close(); 
} 

}

回答

1

你将不得不启用服务器JVM调试。 这通常是通过以下JVM ARGS做 -

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787 

然后,您需要使用服务器的IP地址和上述的调试端口连接到过程 - 8787

0

答案之一已经表示如何启用JDWP在服务器上。这需要您有适当的权限才能打开必要的端口。

如果您没有此权限,我会虚心建议使用记录器。您的代码完全没有任何日志调用,而这些调用在您对运行时环境没有太多控制的情况下会有所帮助。

您可以从Java中使用日志框架开始 - java.util.logging,但您会发现log4j或slf4j更直观。