Ok dopo un pò di ore ce l'ho fatta!!!!!

Ho riscritto il codice da capo, più pulito lineare e chiaro.
Funziona quasi, quasi nel senso che solo per il primo flusso di messaggi si ha il corretto funzionamento (la prima volta che si clicca su send), la seconda volta invece si blocca.
Credo di sapere quale sia il motivo, ovvero il fatto che quando per la seconda volta chiamo il metodo fromClient nella classe Server questo cerca di fare nuovamente
codice:
s1 = server.accept();
Ecco il codice:
Codice associato al tasto connessione:
codice:
objS.connect(jTextField2.getText()); //objS e objC sono stati dichiarati sopra e permettono
//di chiamare i metodi delle classi Client e Sever
objC.connect(jTextField1.getText(),jTextField2.getText());
Codice associato al tasto send:
codice:
objC.getText(jTextArea2.getText());
objC.toServer();
jTextArea1.append(objC.toPrint()+"\n");
jTextArea2.setText("");
objS.fromClient();
jTextArea1.append(objS.toPrint()+"\n");
Client
codice:
package chat_v01;
import java.net.*;
import java.io.*;
public class Client
{
String ip;
String port;
Socket s1;
public void connect( String ip, String port )
{
this.ip=ip;
this.port=port;
int ponumber=Integer.parseInt(port);
try
{
s1 = new Socket (ip, ponumber);
}
catch (ConnectException connExc)
{
System.err.println("Errore nella connessione ");
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
String text;
public void getText(String text)
{
this.text=text;
}
public void toServer()
{
try
{
//BufferedReader dalServer = new BufferedReader(new InputStreamReader(s1.getInputStream()));
PrintWriter alServer= new PrintWriter(s1.getOutputStream(),true);
alServer.println(text);
}
catch (ConnectException connExc)
{
System.err.println("Errore nella connessione ");
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
public String toPrint()
{
String finaltext="Client said: "+text;
return finaltext;
}
}
Server
codice:
package chat_v01;
import java.net.*;
import java.io.*;
public class Server
{
String port;
Socket s1;
ServerSocket server;
public void connect(String port)
{
this.port=port;
int portnumber=Integer.parseInt(port);
try
{
server=new ServerSocket(portnumber);
}
catch (IOException e)
{
e.printStackTrace();
}
}
BufferedReader dalClient;
String text;
public void fromClient()
{
try
{
s1 = server.accept();
dalClient=new BufferedReader(new InputStreamReader(s1.getInputStream()));
text=dalClient.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public String toPrint()
{
String finaltext="Server said: "+text;
return finaltext;
}
}
Ho pensato di risolvere il problema spostando
codice:
s1 = server.accept();
all'interno del metodo connect della classe Server di modo tale che venisse invocato solo una volta.. Tuttavia in questo modo il programma si impalla già immediatamente quando viene premuto il tasto connetti.
Ci sono quasi mi date un'ultima spinta?