Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Aiuto socket mista

    Salve a tutti!!! Ho un problemino su una trasmissione dati via socket TCP in java. Sto implementando un dialogo dove il Client manda un file al Server e quest'ultimo lo salva in locale. Dopo il file cerco di inviare una stringa di controllo sempre dal Client al Server ma non arriva o perchè c'è qualche errore o perchè mi dice "Socket is closed" . Qualcuno può aiutarmi? Qui sotto i file incriminati...Grazie!!

    SERVER

    public class ServerFile {

    public static void main(String[] args)throws Exception {

    ServerSocket serSock=new ServerSocket(4004);
    Socket server= serSock.accept();
    String leggo;
    DataInputStream in = new DataInputStream(server.getInputStream());
    DataOutputStream out = new DataOutputStream(server.getOutputStream());

    File nuovo = new File ("C:\\NuovoFile.xml");
    FileWriter scrivo = new FileWriter(nuovo);

    leggo=in.readLine();
    System.out.println(leggo);

    scrivo.write(leggo); //salvataggio file ricevuto
    scrivo.close();
    in.close();

    DataInputStream in1 = new DataInputStream(server.getInputStream());
    String data = in1.readUTF(); //Qui non arriva niente (dovrebbe arrivare "Hai finito?")
    System.out.println("Ricevuto: " + data);


    server.close();

    }
    }


    CLIENT


    public class ClientFile {

    public static void main(String[] args)throws Exception {

    String linea;
    Socket client= new Socket("localhost", 4004);

    DataInputStream in = new DataInputStream(client.getInputStream());
    DataOutputStream out = new DataOutputStream(client.getOutputStream());

    BufferedReader file = new BufferedReader(new FileReader("c:\\mioFile.xml"));
    do{
    linea=file.readLine(); //spedizione file
    System.out.println(linea);
    out.writeBytes(linea);
    }while (!linea.equals("</fine_file>"));
    file.close();
    out.close();

    DataOutputStream out1 = new DataOutputStream(client.getOutputStream()); //tentativo di spedizione stringa
    out1.writeUTF("hai finito? \n");

    client.close();

    }

    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non devi chiudere i canali di input e output dopo ogni dialogo.
    Sul server, dopo aver ricevuto il file, effettui una in.close(): questo provoca la chiusura, non solo del DataInputStream, ma anche del canale sul quale è stato costruito.

    Puoi creare un secondo canale di input sull'InputStream della socket, ma senza chiudere il DataInputStream.

    Il mio consiglio, comunque, è quello di costruire un solo oggetto sul canale di input e di usare sempre quell'oggetto per ricevere dati (di qualsiasi formato siano, ricorda: più è generale la comunicazione, più deve essere generale l'InputStream).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3

    Grazie ma...

    Grazie Lele per la risposta. Ho seguito il tuo consiglio e infatti adesso la stringa arriva, però la scrive nel file... . A me serve fuori... Potresti scrivere le istruzioni che devo inserire nei file? E' anche probabile che abbia sbagliato io a programmare... :master: .Ciao e grazie ancora

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E' sicuro che tu abbia sbagliato a programmare.
    Posta il codice relativo che vediamo dov'è l'errore.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5

    Nuovo codice

    Ciao. Allora ti posto il pezzo di codice che ho modificato. Per il resto è rimasto tutto uguale.

    SERVER

    scrivo.write(leggo);
    scrivo.close();

    DataInputStream in1 = new DataInputStream(server.getInputStream());
    String data = in1.readUTF();
    System.out.println("\n Ricevuto: " + data);

    CLIENT

    }while (!linea.equals("</Finefile>"));
    file.close();

    DataOutputStream out1 = new DataOutputStream(client.getOutputStream());
    out1.writeBytes("hai finito? \n");

  6. #6
    Ho fatto qualche prova con altri file e sembra che l'imostazione del flusso dati sia corretto. Quindi mi chiedo se magari sbaglio a chiudere il file di destinazione. O no? Ciao ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.