Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

errore stranissimo con socket!!

0 views
Skip to first unread message

massimilianoG

unread,
Oct 14, 2006, 1:32:35 PM10/14/06
to
Salve a tutto il NG.
Sto utilizzando Java (Eclipse) per creare una connessione server -
client utilizzando i socket.
Vi assicuro che prima di scrivere in questo NG ho provato di tutto per
risolvere il problema che vado ora ad esporvi.Non so più dove sbattere
la testa!!!
Il mio problema è che viene lanciata una eccezione a me
incomprensibile e solo in certe condizioni.Il mio codice crea
semplicemente 2 flussi DataOutputStream nel client e nel Server....è
di una semplicità estrema , per questo non capisco come possa esserci
un errore!

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

gianluca

unread,
Oct 14, 2006, 1:44:42 PM10/14/06
to
Riporta lo StackTrace dell'Exception per intero.

Penso che l'eccezione te la possa dare occasionalmente anche *senza* la Riga
Incriminata.

Cosa desideri ottenere esattamente?


stajune

unread,
Oct 15, 2006, 7:01:38 AM10/15/06
to
massimilianoG ha detto::

>
> 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

0 new messages