Array of Sockets Java

2019-02-20 00:30发布

I'm creating server and client java applications. I would like to create an array to store my sockets in. I'm using eclipse, and when I type in this line:

Socket[] sockets = new Socket[3];

Eclipse gives me an error saying "The resource type Socket[] does not implement java.lang.AutoCloseable".

How can I fix this?

Thank you

Try/Catch Statement:

try (
                Socket[] sockets = new Socket[3]; //Line giving me error
                ServerSocket serverSocket =
                    new ServerSocket(Integer.parseInt(ip));
                Socket clientSocket = serverSocket.accept();     
                ServerClient client = new ServerClient(clientSocket);

                PrintWriter out =
                    new PrintWriter(clientSocket.getOutputStream(), true);                   
                BufferedReader in = new BufferedReader(
                    new InputStreamReader(clientSocket.getInputStream()));
                //User input
                BufferedReader stdIn =
                    new BufferedReader(
                        new InputStreamReader(System.in))
            ) {
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    out.println(inputLine);
                }
            } 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());
                continue;
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

4条回答
老娘就宠你
2楼-- · 2019-02-20 00:49

The resources defined in a try-with-resources block must all be auto-closeable. That's what it's for. Socket[] is not AutoCloseable, so it cannot be defined there. Move the declaration before the try. Ditto for any other resources you get the error on. Don't treat it as a general declaration block. It isn't.

查看更多
forever°为你锁心
3楼-- · 2019-02-20 00:50

When I run your code I recevie this error message

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - incompatible types: try-with-resources not applicable to variable type
    (java.net.Socket[] cannot be converted to java.lang.AutoCloseable)

I advice you not to use try catch block with resources when you want to define your socket array.

       try (
            your rest of code
        ) { 
    define your array here --->  Socket[] sockets = new Socket[3];
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                out.println(inputLine);
            }
        } catch (IOException e) {
           your rest of code 

Note: Socket class implements Closeable and AutoCloseable , yet array cannot be defined in try block like you tried to do

查看更多
何必那么认真
4楼-- · 2019-02-20 01:06

You can outsmart this problem easily, just create a class containing a socket connection, then build an array of this class object.

Build the class:

Class example { Socket con;

The constructor and extra code here ...

}

Then just build the array:

example[] arr=new example[3];

查看更多
姐就是有狂的资本
5楼-- · 2019-02-20 01:09

While Socket class itself implements AutoCloseable interface, array of Sockets - does not.

To put it in simple terms: you cannot open or close an array.

查看更多
登录 后发表回答