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();
}
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.
When I run your code I recevie this error message
I advice you not to use try catch block with resources when you want to define your socket array.
Note: Socket class implements Closeable and AutoCloseable , yet array cannot be defined in try block like you tried to do
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];
While
Socket
class itself implementsAutoCloseable
interface, array of Sockets - does not.To put it in simple terms: you cannot open or close an array.