1)Il problema è che l'errore NON VIENE LANCIATO SEMPRE!Se tolgo la
riga incriminata dalla classe client (tale riga è indicata nel codice
sottostante) TUTTO FUNZIONA BENE! Se invece metto la riga mi viene
lanciata l'eccezione che riporto nel seguito. Ma perchè?!?Perchè
un'operazione di lettura mi modifica il tutto?!?Non c'entra niente con
il flusso dos...
2)Un'altra cosa strana è che se invece della riga incriminata metto
un'istruzione del tipo System.out.println("ciao") tutto funziona
bene....non viene lanciata l'eccezione...
il codice è il seguente:
LA CLASSE CLIENT E':
public class client {
Socket s;
DataInputStream dis;
DataOutputStream dos;
BufferedReader stdIn;
public client() throws Exception
{
s = new Socket("localhost",7777);
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
}
public static void main(String[] args) throws Exception
{
client Client=new client();
Client.scambio();
}
public void scambio () throws Exception
{
String messaggio;
stdIn = new BufferedReader(new
InputStreamReader(System.in));
messaggio=stdIn.readLine().toString(); //RIGA
INCRIMINATA: QUESTA RIGA CAMBIA TUTTO!!
dos.writeUTF("Sono ilclient!");
}
LA CLASSE SERVER E':
public class server{
Socket s;
DataInputStream dis;
DataOutputStream dos;
public server() throws Exception
{
ServerSocket ss = new ServerSocket(7777);
System.out.println("Listening on port " + 7777 + "...");
s = ss.accept();
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
}
public static void main(String[] args) throws Exception
{
server Server=new client();
Server.scambio();
}
public void scambio()throws Exception
{
dos.writeUTF("Eccomi!");
}
}
L'Eccezione è:
Exception in thread "main" java.net.SocketException: Connection reset
by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.DataOutputStream.write(Unknown Source)
at java.io.DataOutputStream.writeUTF(Unknown Source)
at java.io.DataOutputStream.writeUTF(Unknown Source)
Spero che qualcuno mi dia una mano...vi ringrazio in anticipo!!!
Ciao a tutti,
Massimiliano
Penso che l'eccezione te la possa dare occasionalmente anche *senza* la Riga
Incriminata.
Cosa desideri ottenere esattamente?
>
> 1)Il problema è che l'errore NON VIENE LANCIATO SEMPRE!Se tolgo la
> riga incriminata dalla classe client (tale riga è indicata nel codice
> sottostante) TUTTO FUNZIONA BENE!
Che significa funziona bene? Che compila? Non è molto chiaro a che serva
questa applicazione, visto che tutti scrivono e nessuno legge...
Ad ogni modo,
> messaggio=stdIn.readLine().toString(); //RIGA INCRIMINATA: QUESTA RIGA
CAMBIA TUTTO!!
readLine() restituisce già la String, quindi non capisco a che serva il
toString()
> server Server=new client();
mi sa che ci starebbe meglio un new server(), no?
Prova a rimettere a posto almeno queste cose basilari, eventualmente
prova anche a leggere dall'altra parte i dati che scrivi sulla socket.
Nota: se usassi le convenzioni java (Classi e Costruttori con la
maiuscola, istanze con la minuscola) il tuo codice sarebbe molto più
leggibile.
Ciao
--
stajune