Salve amici sto riscontrando un problema nella realizzazione di questo semplice programma
Client:
codice:
importjava.io.BufferedReader;import java.io.InputStreamReader;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
class ClientTCP {
public static void main (String[] args) throws IOException {
String msg, msg2;
final int YOU = 0;
final int PEER = 1;
final int EXIT = 2;
int status = YOU;
//long off;
Socket clientSocket = new Socket("127.0.0.1", 6789);
Scanner scriveClient = new Scanner(System.in);
Scanner leggeServer = new Scanner (clientSocket.getInputStream());
PrintStream outToServer = new PrintStream(clientSocket.getOutputStream());
while(status != EXIT) {
switch(status) {
case YOU: // client scrive
System.out.print("YOU> ");
msg = scriveClient.nextLine();
// fa un controllo sul msg, se c'è il punto il client si deve disconnettere
CharSequence cs = ".";
if(msg.contains(cs)) {
status = EXIT;
break;
}
outToServer.println(msg); // ilmessaggiovienemandatoal server
status = PEER;
break;
case PEER: // client legge
msg2 = leggeServer.nextLine();
System.out.println("PEER> " + msg2);
status = YOU;
break;
}
}
System.out.println("Il server si è disconnesso!!!!!");
clientSocket.close();
}
}
Server:
codice:
import java.net.ServerSocket;import java.net.Socket;
import java.util.Scanner;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
class ServerTCP {
public static void main (String[] args) throws IOException {
String msg, msg2;
final int YOU = 0;
final int PEER = 1;
final int EXIT = 2;
int status = PEER;
String c;
String c2;
ServerSocket welcomeSocket = new ServerSocket(6789);
Scanner scriveServer = new Scanner(System.in);
Socket connectionSocket = welcomeSocket.accept();
Scanner leggiClient = new Scanner(connectionSocket.getInputStream());
PrintStream outToClient = new PrintStream(connectionSocket.getOutputStream());
while(status != EXIT) {
switch(status) {
case YOU: // server scrive
System.out.print("You> ");
msg = scriveServer.nextLine();
outToClient.println(msg);
status = PEER;
break;
case PEER: // server legge
msg2 = leggiClient.nextLine();
System.out.println("Peer> " + msg2);
status = YOU;
break;
}
}
System.out.println("Il client si è disconnesso!!!!");
// connectionSocket.close(); // e chiudo la connessione
}
}
Il problema che sto riscontrando è il seguente: il client nel momento in cui digita il . sta dicendo che vuole disconnettersi dal server, pertanto al server deve arrivare un messaggio del tipo "Il client si è disconnesso" e deve cessare la comunicazione.La stessa cosa la dovrò implementare anche per il server e così via.Per il momento ho implementato questo codice dal lato client
codice:
CharSequence cs = "."; if(msg.contains(cs)) {
status = EXIT;
break;
}
però quando digito il punto mi solleva questa eccezione:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1516)
at es3_5modificato.ServerTCP.main(ServerTCP.java:43)
Qualche consiglio pervafore??