Salve a tutti!
Devo far scambiare oggetti tra un client e un server ma non mi funziona e non riesco a capire perchè. quando li avvio, non mi danno errori, nè eccezioni; la connessione si instaura ma non avviene lo scambio di messaggi quindi sia l'uno che l'altro restano in un'attesa infinita. GRAZIE A QUANTI MI AIUTERANNO!

L'oggetto che si dovrebbero scambiare è di tipo Message:

codice:
package clientserver;

import java.io.Serializable;
/**
 *
 * @author Rosa Linda
 */
public class Message implements Serializable{
    private String mittente;
    private String ricevente;
    private int porta;

    Message(String mittente, String ricevente, int porta){
        this.mittente=mittente;
        this.ricevente=ricevente;
        this.porta=porta;
    }

    public String getMittente(){
        return this.mittente;
    }

    public String getRicevente(){
        return this.ricevente;
    }

    public int getPorta(){
        return this.porta;
    }

}
Ecco il codice di server e client:
codice:
import java.io.*;
import java.net.*;
import java.util.*;

/**
 *
 * @author Rosa Linda
 */
public class Server extends Thread{
    private ServerSocket Server;

    public static void main(String[] args) throws Exception{
        new Server();
    }

    public Server() throws Exception{
        this.Server=new ServerSocket(4000);
        System.out.println("Il server è in ascolto sulla porta 4000");
        this.start();
    }

    @Override
    public void run(){
        while(true){
            try{
                System.out.println("In attesa di connesione");
                Socket client=Server.accept();
                System.out.println("Connessione accettata da "+client.getInetAddress());
                Connect c=new Connect(client);
            }catch(Exception e){

            }
        }
    }

}

class Connect extends Thread implements Serializable{
    private Socket client=null;
    ObjectOutputStream oos=null;
    ObjectInputStream ois=null;

    public Connect(){

    }

    public Connect(Socket clientSocket){
        this.client=clientSocket;
        
        try{
//IL PROBLEMA E' QUI SECONDO ME
            ois=new ObjectInputStream(client.getInputStream());     
            oos=new ObjectOutputStream(client.getOutputStream());
            
        }catch(Exception e){
            try{
                System.out.println("Il client si è disconnesso");
                client.close();
            }catch(Exception ee){
                System.out.println(ee.getMessage());
            }
            return;
        }
        this.start();
    }
    
    @Override
    public void run(){
        try{
            Message message=new Message("Server","Client",4000);           
           
            oos.writeObject(message);
            
            oos.flush();
            oos.close();
            ois.close();
            client.close();
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
    }
}
codice:
import java.io.*;
import java.net.*;

/**
 *
 * @author Rosa Linda
 */
public class Client implements Serializable{
    public static void main(String[] args){
        ObjectOutputStream oos=null;
        ObjectInputStream ois=null;
        Socket socket=null;
        Message message;

            try{
                socket=new Socket("localhost",4000);
                ois=new ObjectInputStream(socket.getInputStream());
                oos=new ObjectOutputStream(socket.getOutputStream());
                message=(Message)ois.readObject();
                System.out.println("Messaggio ricevuto da: "+message.getMittente()+" per "+message.getRicevente()+"\nConnessione avvenuta sulla porta "+message.getPorta());
                oos.close();
                ois.close();
            }catch(Exception e){
                System.out.println(e.getMessage());
            }
    }
}