Ich soll einen Server mit threadPool (ExecutorService) generieren und irgendetwas scheine ich da doppelt zu haben aber drauf komme ich nicht was:
Server:
Protocoll:
Handler Run:
Client Main:
Der Server startet normal. Wenn ich darauf hin den Client starten will, schließt der sofort und der Server schließt mit dem Error:
Server:
Java:
public void run() { // run the service
try {
long client_number=1;
for (;;) {
ServerSocket serverSocket = new ServerSocket(Protocoll.PORT);
pool.execute(proto.repsonse(serverSocket, client_number++)); //proto ist eine Serverinstanz vom Protokoll
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
pool.shutdown();
}
}
Protocoll:
Java:
public Handler repsonse(ServerSocket serverSocket, long number){
try (Socket client = serverSocket.accept();) {
return new Handler(client, this,number);
} catch (IOException e) {
System.out.println("Exception caught when trying to listen on port "
+ PORT + " or listening for a connection");
System.out.println(e.getMessage());
return null;
}
}
Handler Run:
Java:
@Override
public void run() {
try (
PrintWriter out =
new PrintWriter(client.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(client.getInputStream()));
) {
String inputLine;
out.println("Hello "+number);
while ((inputLine = in.readLine()) != null) {
String answer=proto.reply(inputLine, number);
out.println("Connection "+number+":"+answer);
if (answer.endsWith("Bye.")){
this.finalize();
break;
}
}
} catch (IOException e) {
System.out.println(e.getMessage());
} catch (Throwable e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}
}
Client Main:
Java:
String hostName = args[0];
int portNumber = Protocoll.PORT;
try (
Socket socket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
) {
BufferedReader stdIn =
new BufferedReader(new InputStreamReader(System.in));
String fromServer;
String fromUser;
while ((fromServer = in.readLine()) != null) {
System.out.println("Server: " + fromServer);
if (fromServer.endsWith("Bye."))
break;
fromUser = stdIn.readLine();
if (fromUser != null) {
System.out.println("Client: " + fromUser);
out.println(fromUser);
}
}
} catch (UnknownHostException e) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to " +
hostName);
System.exit(1);
}
Code:
Socket is closed
Address already in use: JVM_Bind