我正在尝试用 java 创建一个短信程序,如果命令行参数不包含 "-l"
,则该程序可以充当客户端;如果命令行参数包含 "-l"
,则可以充当服务器。
对于此错误,我正在研究服务器行为。
服务器的命令行参数类似于
java DirectMessengerServer -l 6004
DirectMessageServer.java代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class DirectMessengerServer {
public static void main(String args[]) throws IOException {
Thread Server = new Thread() {
public void run() {
int port = Integer.parseInt(args[0]);
int port_number1 = Integer.valueOf(args[0]);
ServerSocket server_socket = null;
Socket client_socket;
String message1;
for (int i = 0; i < args.length; i++) {
if (args[i] == "-l") {
try {
System.out.println("Listening for connections..");
client_socket = server_socket.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(client_socket.getInputStream(), "UTF8"));
PrintWriter output = new PrintWriter(client_socket.getOutputStream(), true);
String input_line = reader.readLine();
System.out.println("Received from client: ");
System.out.println(input_line);
output.println(input_line);
} catch (Exception e) {
System.out.println(e.getMessage());
}
//server.close();
}
}
}
};
Server.start();
}
}
我的问题是如何解决该错误和/或当它显示 thread - 0
异常时它实际意味着什么和/或"numberformatexception"
在错误中意味着什么?
最佳答案
您正在尝试将 -l
解析为整数,这就是问题所在。
java DirectMessengerServer -l 6004
您的第一个参数是字符串类型,第二个参数是整数。
这正是屏幕截图错误所说的内容。
args[0]
表示 -l
args[1]
端口号
我不确定为什么你的参数有一个循环,但更正参数号可以解决你问题中的问题,也就是说你没有使用端口号变量,你的代码逻辑可以稍微改进。
关于在 Mac 终端上使用命令行参数时发生 Java 服务器线程错误(Eclipse 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43197585/