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