Salve a tutti,
vorrei scrivere un server, che utilizzi le Socket, e che sia MultiThreading.
Il codice del Server non MultiThreading è il seguente:
// Main.java
import java.io.IOException;
public class Main {
static Server server;
public static void main(String[] args) throws IOException {
server = new Server();
}
}
// Server.java
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public Server() throws IOException {
try (ServerSocket server = new ServerSocket(80)) {
while (true) {
try (Socket socket = server.accept()) {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hello World!");
socket.close();
}
}
}
}
}
il codice MultiThreading è il seguente:
// Main.java
import java.io.IOException;
public class Main {
static Server server;
public static void main(String[] args) throws IOException {
server = new Server();
}
}
// Server.java
iimport java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
ServerSocket server;
public Server() throws IOException {
server = new ServerSocket(80);
while (true) {
try (Socket socket = server.accept()) {
Connessioni nuovaConnessione = new Connessioni(socket);
}
}
}
}
// Connessioni.java
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
public class Connessioni extends Thread{
Socket socket;
PrintWriter out;
public Connessioni(Socket socket) throws IOException {
this.socket = socket;
this.start();
}
public void run() {
try {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("Hello World!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Tale codice mi restituisce il seguente errore:
java.net.SocketException: Socket is closed
ovvero, alla riga seguente, il socket risulta chiuso:
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
Dove sbaglio?
Grazie in anticipo a tutti.