La seguente comunicazione client/server funziona per una porta diversa dalla 2012, mentre su quella porta quando
lancio il server mi appare il seguente output:


Server in attesa sulla porta 2012
Connessione avvenuta
ECCEZZIONE Server: java.io.StreamCorruptedException: invalid stream header: 0201F900



********** Client.java **********
codice:
import java.net.*;
import java.io.*;

public class Client
{

    public static void main(String[] args)
    {
        Socket client;
        OutputStream out;
        ObjectOutputStream oos;
        String messaggioDaInviareAlServer;
        
        messaggioDaInviareAlServer="Ciao ciao";
        
        String serverName="127.0.0.1";
        int port=2012; // 2012 // <----- PORTA

        try
        {
        System.out.println("Connessione a " + serverName + " sulla porta " + port);
        client = new Socket(serverName, port);
          
        System.out.println("Collegato a " + client.getRemoteSocketAddress());
        
        out=client.getOutputStream();
        oos=new ObjectOutputStream(out);
        
        oos.writeUTF(messaggioDaInviareAlServer);
        
        oos.flush();
        client.close();
        
        }
        catch (Exception exc)
        {
            System.out.println("ECCEZIONE Client: "+exc.toString());
        }
        
    }

}

********** Server.java **********
codice:
import java.net.*;
import java.io.*;

public class Server extends Thread {
    private ServerSocket serverSocket;
    InputStream in;
    ObjectInputStream ois;
    String messaggio;

    public Server(int port) throws IOException
    {
        serverSocket = new ServerSocket(port);
        serverSocket.setSoTimeout(100000); // Moltiplicato per 10 // se 0 loop infinito
    }

    public void run()
    {
        while (true)
        {
            try
            {
                System.out.println("\nServer in attesa sulla porta "+serverSocket.getLocalPort()); 
                Socket server = serverSocket.accept();
         
                //System.out.println("Connessione avvenuta: " + server.getRemoteSocketAddress());
                System.out.println("Connessione avvenuta");
         
                in=server.getInputStream();
         
                ois=new ObjectInputStream(in);    
                messaggio=ois.readUTF();
            
                System.out.println("Il client ha inviato: "+messaggio);         
                
                // if readUTF() è uguale a "FINE" allora server.close();
                //server.close();
         
            }
            catch(SocketTimeoutException s)
            {
                //System.out.println("Socket timed out!");
                System.out.println("Tempo scaduto - connessione interrotta");
                break;
            }
            catch(Exception exc)
            {
                System.out.println("ECCEZZIONE Server: "+exc.toString());
                break;
            }
        }
}

public static void main(String [] args)
{
   int port=2012; // 2012 <----- PORTA
   try {
      Thread t = new Server(port);
      t.start();
   }
   catch(Exception exc)
   {
       System.out.println("ECCEZZIONE Server: "+exc.toString());
   }
}
}