我有一台将在另一台机器上运行的服务器,我需要使用两台不同的机器进行调试。有没有办法虚拟调试服务器,因为我的机器上的一切运行正常,但当我把它放在另一台机器上时,一切都错了?我没有另外一台机器(我只能主持并看到结果)。
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();
}
}
答案 0 :(得分:1)
您必须在服务器JVM上启用调试。 这通常通过以下JVM args -
完成-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787
然后,您需要使用服务器的IP地址和上述调试端口 - 8787
连接到该进程答案 1 :(得分:0)
其中一个答案已经表明如何在服务器上启用JDWP。这将要求您具有相应的权限来打开必要的端口。
如果您没有此权限,我会谦虚地建议您使用记录器。您的代码完全没有任何日志记录调用,这些调用会在您无法控制运行时环境的情况下提供帮助。
您可以从使用Java中的日志框架开始 - java.util.logging
,但您会发现log4j或slf4j更直观。