SocketServer/Client stürzt ab. Address already in use.

eclipseworker

Bekanntes Mitglied
Ich soll einen Server mit threadPool (ExecutorService) generieren und irgendetwas scheine ich da doppelt zu haben aber drauf komme ich nicht was:
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);
        }
Der Server startet normal. Wenn ich darauf hin den Client starten will, schließt der sofort und der Server schließt mit dem Error:
Code:
Socket is closed
Address already in use: JVM_Bind
 
Du erstellst in deiner for Schleife jedes mal einen neuen Server
Was du willst ist einmalig einen Server zu erstellen, der mehrere Clients in nem Pool haben kann.
 

Zurück
Oben