import java.net.*;
import java.io.*;
class Server extends Thread
{
private ServerSocket mioServer;
private Socket client;
public Server(Socket socket)
{
System.out.println("Arrivato un nuovo client da "+client.getInetAddress());
client=socket;
}
public void run()
{
/*
Il codice che si occupa della comunicazione con il client
è contenuto in questo metodo (run()) che viene chiamato
automaticamente quando un thread viene mandato in esecuzione
(cioè quando si richiama il metodo Start()
*/
try
{
int msg;
InputStream In=client.getInputStream();
OutputStream Out=client.getOutputStream();
PrintStream video=new PrintStream(Out);
video.println("Benvenuti sul server di IBC");
video.println();
ByteArrayOutputStream comando=new ByteArrayOutputStream();
while ((msg=In.read())>-1)
{
Out.write(msg);
if (msg ==13) // Nuova riga
{
video.println();
try
{
Thread.sleep(3000);
}
catch (Exception errore)
{
break;
}
} else if (msg!=10) // Carriage return
{
comando.write(msg);
}
}
}
catch (Exception errore)
{
errore.printStackTrace();
} finally {
System.out.println("Connessione chiusa con "+client.getInetAddress());
try
{
client.close();
}
catch (Exception errore)
{
errore.printStackTrace();
}
}
}
public static void main(String[] args) throws Exception
{
int porta=1024;
Socket client;
ServerSocket mioServer;
System.out.println("Server in partenza sulla porta "+porta);
mioServer=new ServerSocket(porta);
System.out.println("Server avviato sulla porta "+porta);
/*
Ciclo infinito in cui viene eseguito il metodo accept()
in attesa della richiesta di un client
*/
while(true) {
System.out.println("In attesa di connessioni...");
client=mioServer.accept(); // Restituisce un oggetto Socket
/*
Ricevuta la richiesta si crea un nuovo oggetto della classe
(e quindi un nuovo thread), passando ad esso la socket relativa
a tale connessione, e viene lanciato così un nuovo thread di esecuzione
*/
System.out.println("Richiesta di connessione da "+client.getInetAddress());
(new Server(client)).start();
// Si ritorna ad eseguire il metodo accept()
}
}
}
Va finchè non mi collego tramite client (output in rosso), dopodichè dà quest'errore (output in blu)
---------- Esegui ----------
Server in partenza sulla porta 1024
Server avviato sulla porta 1024
In attesa di connessioni...
Richiesta di connessione da /127.0.0.1
java.lang.NullPointerException
at Server.<init>(Server.java:11)
at Server.main(Server.java:93)
Exception in thread "main" Normal Termination
Output completed (28 sec consumed).
Cos'è?![]()