Ciao, sto cercando di farr comunicare più client con un solo server.
I client inviano stringhe di testo al server che le riceve e controlla se hanno una particolare sintassi. Se la sintassi è di un certo tipo fa un azione e restituisce un messaggio di conferma.
La cosa sembra funzionare ma dopo aver inserito una stringa giusta (ad esempio ##A##) e aver ricevuto la conferma ( OK A), tutte le volte successive che inserisco una stringa esatta mi da prima errore e poi inserendo una qualsiasi altra stringa (giusta o sbagliata) mi da la conferma a quella di prima.....
Metto il codice semplificato qui sotto, spero che qualcuno possa darmi una mano. Grazie in anticipo.
-- SERVER -----------------------------------------------------------------------------
public class TCPParallelServer {
public void start() throws Exception {
ServerSocket serverSocket = new ServerSocket(7777);
//Ciclo infinito di ascolto dei Client
while(true) {
System.out.println("In attesa di chiamate dai Client... ");
Socket socket = serverSocket.accept();
System.out.println("Ho ricevuto una chiamata di apertura da: [" + socket.getInetAddress() + "]");
ServerThread serverThread = new ServerThread(socket);
serverThread.start();
}
}
class ServerThread extends Thread {
private Socket socket;
static ArrayList anagraficaBloccata = new ArrayList();
static ArrayList magazzinoBloccato = new ArrayList();
public ServerThread (Socket socket) {
this.socket = socket;
}
//esecuzione del Thread sul Socket
public void run() {
try {
DataInputStream is = new DataInputStream(socket.getInputStream());
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
BufferedWriter stOut = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())) ;
while(true) {
String userInput = "";
userInput = is.readLine();
if (userInput == null || userInput.equals("##QUIT##"))
break;
else{
// controllo la stringa che ricevo
if(userInput.startsWith("##A##")){
stOut.write("OK A \r\n");
stOut.flush();
}
if(userInput.startsWith("##M##")){
stOut.write("OK M \r\n");
stOut.flush();
}
// comando non riconosicuto
else{
//os.writeBytes("");
stOut.write("ERRORE FORMATO STRINGA \r\n");
stOut.flush();
}
userInput = "";
os.flush();
}
}
os.close();
is.close();
System.out.println("Ho ricevuto una chiamata di chiusura da: " + socket + "\r\n");
socket.close();
}
catch (IOException e) {
System.out.println("IOException: " + e);
}
}
-- CLIENT ----------------------------------------------------------------------------
public class TCPClient {
public void start()throws IOException {
//Connessione della Socket con il Server
Socket socket = new Socket("127.0.0.1", 7777);
//Stream di byte da passare al Socket
DataOutputStream os = new DataOutputStream(socket.getOutputStream());
DataInputStream is = new DataInputStream(socket.getInputStream());
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Per disconnettersi dal Server scrivere: QUIT\n");
//Ciclo infinito per inserimento testo del Client
while (true) {
System.out.print("Inserisci: ");
String userInput = stdIn.readLine();
if (userInput.equals("QUIT"))
break;
os.writeBytes(userInput + '\n');
//System.out.println(is.readLine());
String risposta = is.readLine();
System.out.println("Messaggio di risposta: " + risposta);
}
//Chiusura dello Stream e del Socket
os.close();
is.close();
socket.close();
}
public static void main (String[] args) throws Exception {
TCPClient tcpClient = new TCPClient();
tcpClient.start();
}
}