PDA

View Full Version : [JAVA] server si blocca


aurora89
12-12-2010, 11:16
ciao a tutti!
stavo provando un semplice programma client server singlethread dove il client invia una stringa al server e il server la rimanda al client...solo che una volta che il client invia la stringa al server quest'ultimo si blocca e continua ad eseguire le operazioni solo quando forzo l'uscita del client con ctrl + c.
Questi sono i due codici:

CLIENT


import java.io.*;
import java.net.*;
import java.lang.*;
import java.util.*;

class TCPClient {
public static void main(String argv[]) throws Exception
{

String modifiedSentence;
String riga;

BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("127.0.0.1", 1304);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());

System.out.println("Inserisci stringa : ");
riga = inFromUser.readLine();

System.out.println("La stringa inserita è: " + riga);
outToServer.writeBytes(riga);

System.out.println("Elementi inviati. In attesa del server...");

BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

modifiedSentence = inFromServer.readLine();

System.out.println("FROM SERVER: " + modifiedSentence);

clientSocket.close();

} }


SERVER:

import java.io.*;
import java.net.*;
import java.util.*;
import java.lang.*;


class TCPServer {
public static void main(String argv[]) throws Exception
{
String clientSentence; String stringa;

ServerSocket welcomeSocket = new ServerSocket(1304);

while(true) {

Socket connectionSocket = welcomeSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());

System.out.println("Connessione stabilita..."); /*qui si blocca*/

clientSentence = inFromClient.readLine();

stringa = clientSentence;

System.out.println("E' stata ricevuta la seguente stringa: " + stringa);

outToClient.writeBytes(stringa);

connectionSocket.close();

}
}
}


e quello che accade quando eseguo è:

CLIENT:
Inserisci stringa :
ciao
La stringa inserita è: ciao
Elementi inviati. In attesa del server...
^C

SERVER:
Connessione stabilita...
E' stata ricevuta la seguente stringa: ciao (questo lo fa solo dopo che ho premuto ctrl+c sul client)
Exception in thread "main" java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStream.java:132)
at java.io.DataOutputStream.writeBytes(DataOutputStream.java:276)
at TCPServer.main(server2.java:28)

Qualcuno sa dirmi come posso risolvere???
grazie mille in anticipo :)