Non sono stato lì a guardare tutte le classi (che suggerisco di indentare meglio, che così è davvero un macello leggere il codice), ma ho visto la classe Main:

codice:
package comunicazione;   
import java.sql.*; 
import java.io.*; 
import java.net.*; 
import java.util.*;
 import java.util.Vector; 
import java.io.BufferedReader.*;  
public class Main{   
   public static void main(String[] args){   
      Socket s1;      // dichiarata e MAI inizializzata 
      InputStream s1in;     
      DataInputStream dis;     
      try {
         // qui usi "s1", ma non l'hai MAI inizializzata 
         BufferedReader in = new BufferedReader( new InputStreamReader( s1.getInputStream() ) );
         System.out.println ("digita a"); 
         if( in.readLine().equals("a") ){
            String sendString="Buongiorno";
         }
      }catch (IOException e) { e.printStackTrace();   }
   }
}
Poi, sinceramente, non ho ben capito a cosa ti serva una Socket all'interno della classe Main (visto che tutta la comunicazione, dalla connessione all'invio dei dati alla chiusura viene correttamente fatto nelle altre classi), ma questo lo vedrai da te...


Ciao.