Ciao a tutti... Ho un disperato bisogno di chiuque possa aiutarmi :master: Devo realizzare un'applicazione client server su socket java TCP. Il client invia un file al server, che controlla se è corretto e risponde di conseguenza al client. E' quest'ultima comunicazione che non mi funziona![]()
Vi prego ho urgente bisogno per l'esame.Grazie per l'interessamento
Qui sotto i file:
SERVER
...
...
ServerSocket ss = new ServerSocket (7000); //creazione della socket
while(true){
Socket client = ss.accept(); //il server è in ascolto e appena un client lo contatta avvia una connesione
DataOutputStream messaggio =new DataOutputStream(client.getOutputStream());
ObjectInputStream ois = new ObjectInputStream( client.getInputStream() );
FileOutputStream fos = new FileOutputStream( "C:\\utenti\\temp.xml" ); // Creo il file di output temporaneo
byte buffer[];
try {
while ( true ) {
buffer = (byte[]) ois.readObject();
fos.write( buffer ); //riempio il file con i dati che arrivano dal client
}
}catch (Exception eofe) {
fos.close(); //arrivo qui perchè il file è finito quindi chiudo quello di destinazione
}
//ois.close(); //chiudo il canale dello stream con il client
File dir = new File ("C:\\utenti\\");// se non esiste creo la directory utenti
String lista[] = dir.list();
boolean trovato=false;
nf=NomeFile(); // mi salvo l'username del file appena creato e...
for(int i=0;i<lista.length && !trovato;i++){
if(!trovato && lista[i].equals(nf+".xml")){ //... se già esiste un file che si chiama cosi
System.out.println("File esistente in server");
messaggio.writeBytes("ko"); trovato=true;
}
}
if (!trovato) { // se invece non esiste il file
risultato=validazione(); // applico la validazione al temporaneo
if (risultato){ //nel caso vada tutto bene
File vecchio = new File ("C:\\utenti\\temp.xml");
File nuovo = new File ("C:\\utenti\\" + nf + ".xml"); //creo effettivamente il file xml finale duplicando il temporaneo
FileReader in = new FileReader (vecchio);
FileWriter out = new FileWriter(nuovo);
int c;
while((c=in.read())!=-1){
out.write(c);
}
in.close();
out.close();
}
}
CLIENT
public void RegistrazioneClient(String file) {
try{
Socket s = new Socket("localhost", 7000); //Costruzione della socket
FileInputStream fis = new FileInputStream(file); //Oggetto per leggere il file da inviare
ObjectOutputStream oos = new ObjectOutputStream( s.getOutputStream() ); //oggetto per inviare il file
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(s.getInputStream())); //Oggetto per ricevere messaggi dal server
byte [] buffer = new byte[4096]; //Inizio codice di invio file
byte [] bufOut;
int len = 0;
while((len = fis.read(buffer)) > 0) { //per ogni blocco di 4 kb....
if (len < 4096) {
bufOut = new byte[len];
for(int i=0; i<len; i++) bufOut[i] = buffer[i];
} else {
bufOut = (byte[]) buffer.clone();
}
oos.writeObject( bufOut ); //Invio del file a blocchi di 4 kb
oos.flush(); //Fine codice invio file
}
fis.close(); //Chiusura del file generato dalla registrazione e che ho inviato al server
// attendo che il server mi dica se esiste già un utente registrato con l'username corrente
if (inFromServer.readLine()=="ko"){ //non mi risponde!!!
JOptionPane.showMessageDialog(getContentPane(),"De vi cambiare l'username");
return;
}else{
JOptionPane.showMessageDialog(getContentPane(),"Re gistrazione completata");
}
s.close(); //Chiusura socket
}catch(Exception e){System.out.print(e.getMessage());}
}