Для моего класса у меня должна быть группа клиентов, которые общаются с сервером.Вы вводите количество клиентов в начале через приглашение.Я знаю, что должен использовать многопоточность для запуска каждого клиента, но я не совсем понимаю, что происходит с моим кодом.Каждый раз, когда я запускаю его, он говорит об исключении сервера: сокет закрыт.Когда я проверяю серверную часть, он говорит следующее для каждого потока:
New client Connected.Exception in thread "Thread-0"
java.lang.NumberFormatException: null
at java.base/java.lang.Integer.parseInt(Integer.java:614)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at ServerThread.run(Server.java:40)
Может кто-нибудь объяснить мне, что я делаю неправильно, и почему это дает мне эту ошибку?Вот код для моего клиента и сервера:
Клиент:
import java.util.*;
import java.net.*;
import java.io.*;
public class Client {
public static void main(String[] args) {
if (args.length < 2) {
System.out.print("Error, less than 2 arguments. Argumens must contain
the server hostname and the port number.");
System.exit(0);
}
String hostName = args[0];
int portNumber = Integer.parseInt(args[1]);
boolean clientFlag = true;
int numberOfClients = 0;
Scanner clientInput = new Scanner(System.in);
while (clientFlag) {
System.out.print("Please enter the number of clients desired: ");
try {
numberOfClients = clientInput.nextInt();
clientFlag = false;
}
catch(InputMismatchException ex) {
System.out.println("Error, must enter an integer. Please try
again.");
clientInput.next();
}
}
Thread[] threadArray = new Thread[numberOfClients];
for (int i = 0; i < numberOfClients; i++) {
try (Socket socket = new Socket(hostName, portNumber)) {
threadArray[i] = new ClientThread(socket);
}
catch (UnknownHostException ex) {
System.out.println("Server not found: " + ex.getMessage());
}
catch (IOException ex) {
System.out.println("I/O error: " + ex.getMessage());
}
}
for (int i = 0; i < numberOfClients; i++) {
threadArray[i].start()
}
}
}
class ClientThread extends Thread {
private Socket socket;
public ClientThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
OutputStream output = socket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
Scanner input2 = new Scanner(System.in);
boolean flag = true;
String option;
String serverValue;
do {
System.out.println("\n1. Host current Date and Time.");
System.out.println("2. Host Uptime");
System.out.println("3. Host memory use");
System.out.println("4. Host Netstat");
System.out.println("5. Host current users");
System.out.println("6. Host running processes");
System.out.println("7. Quit");
System.out.print("\nPlease type the number of the option you wish to
select: ");
option = input2.nextLine();
writer.println(option);
if (!(option.equals("1") || option.equals("2") || option.equals("3")
|| option.equals("4") || option.equals("5") || option.equals("6") ||
option.equals("7")))
System.out.println("Invalid input, please try again.");
if (option.equals("7")) {
System.out.println("Connection to server terminated...");
flag = false;
}
InputStream input = socket.getInputStream();
BufferedReader reader = new BufferedReader(new
InputStreamReader(input));
serverValue = reader.readLine();
System.out.println(serverValue);
} while (flag);
socket.close();
}
catch(IOException ex) {
System.out.println("Server exception: " + ex.getMessage());
}
}
}
Сервер:
import java.util.*;
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args) {
if (args.length < 1) {
System.out.print("Error, no arguments inputted. Argument must contain
the server port number.");
System.exit(0);
}
int port = Integer.parseInt(args[0]);
try(ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server is now listening on port " + port);
while(true) {
Socket socket = serverSocket.accept();
System.out.println("New client Connected.");
new ServerThread(socket).start();
}
}
catch (IOException ex) {
System.out.println("IO Exceptin in server: " + ex.getMessage());
}
}
}
class ServerThread extends Thread {
private Socket socket;
public ServerThread(Socket socket) {
this.socket = socket;
}
public void run() {
try {
InputStream input = socket.getInputStream();
BufferedReader reader = new BufferedReader(new
InputStreamReader(input));
int clientInput = Integer.parseInt(reader.readLine());
OutputStream output = socket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
while (clientInput != 7) {
switch (clientInput) {
case 1: writer.println("You selected option 1"); break;
case 2: writer.println("You selected option 2"); break;
case 3: writer.println("You selected option 3"); break;
case 4: writer.println("You selected option 4"); break;
case 5: writer.println("You selected option 5"); break;
case 6: writer.println("You selected option 6"); break;
}
}
}
catch(IOException ex) {
System.out.println("Server exception: " + ex.getMessage());
}
}
}