Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561

    Problema strano

    Ho questo server:

    codice:
    public class Server {
        private static int port=2000;
        private static int T=0; 
        private Socket client;
        private DataInputStream input;
        private DataOutputStream output;
        private String idFile="2000";
        
      
      private boolean isDigit(String n) throws NumberFormatException{
        try{  
          Integer.parseInt(n);
          return true;
        }catch(NumberFormatException nfe){
           return false; 
        }
      }
      
      public Server(int port){
            this.port=port;
      } 
      private void Autenticate(){
          SecurityService s=new SecurityService();
          try{
              
              int c=input.readInt();
              System.out.println("idship= "+c);
              boolean risposta=s.login(c);
              if (risposta){
                  System.out.println("OK autenticazione riuscita");
                  output.writeUTF("ACK");
              }    
              else
                  output.writeUTF("NAK");
              output.flush(); 
          }catch(IOException ioex){
              System.err.println(ioex.getMessage());
          }
      }
      public void Start() throws IOException {
             int c=-1; 
             try{
                 System.out.println ("Server in partenza sulla porta " + port);
                 ServerSocket server = new ServerSocket(port);
                 System.out.println ("Server partito sulla porta " + server.getLocalPort() ) ;
              while(true){
                 System.out.println ("In attesa di connessioni...");
                 client = server.accept ();
                 System.out.println ("Richiesta di connessione da " + client.getInetAddress ());
                 input =new DataInputStream(new BufferedInputStream (client.getInputStream()));
                 output = new DataOutputStream( new BufferedOutputStream(client.getOutputStream()));
                 do{
                    try{
                    
                     c=input.readInt();
                    
                    switch(c){
                      case 10:
                         output.writeUTF("OK");
                         output.flush();
                         Autenticate();
                      case 30:
                         System.out.println("Client terminate");
                         client=null;
                      case 40:
                         double lat=input.readDouble();
                         System.out.println(lat);
                         double lon=input.readDouble();
                         System.out.println(lon);
                         
                      case 50:
                         System.out.println("File inviato");
                         
                      default:   
                         ;
                     }             
                    }catch(IOException ioex){
                        System.err.println(ioex.getMessage());
                    }
                 }while(!(c==30));
                 input.close();
                 output.close();
                 
              }
             } 
             catch(EOFException ex){
                 System.out.println("Client ha terminato la connessione");
             }catch(IOException ioe){
                 System.err.println(ioe.getMessage());
             }
      }
    }
    il problema è questo il client invia 40 e poi giustamente il server riceve 2 double che li stampa con una System.out.println()

    il fatto strano è che dopo aver stampato i due double stampa anche la stringa "File inviato" che dovrebbe scrivere invece quando riceve 50.Perchè?

    ecco cosa stampa
    Server in partenza sulla porta 2000

    Server partito sulla porta 2000

    In attesa di connessioni...

    Richiesta di connessione da /127.0.0.1

    idship= 11

    11

    OK autenticazione riuscita

    Client terminate

    8.54125290036E-313

    1.7720935413722294E174

    File inviato

    39.848953402657074

    16.925433180931204

    File inviato

    39.208805556246155

    16.447228466132938

    File inviato

    38.460536806432735

    16.727519194792468

    File inviato

    38.29210199097713

    17.508607363607148

    File inviato

    38.85835930243228

    18.072364112341404

    File inviato

    39.6386943800757

    17.900474086106414

    File inviato

    39.91567075222162

    17.150972182311154

    File inviato

    39.43463761966107

    16.51294699479987

    File inviato

    38.63785462607226

    16.572995938566528

    File inviato

    38.25788038120771

    17.275910291641956

    File inviato

    38.64406145345488

    17.97543383946423

    File inviato

    39.44134474595498

    18.028427858183672

    File inviato

    39.9167116764437

    17.38616989138407

    File inviato

    39.63311208129664

    16.63914895181661

    File inviato

    38.851286120405454

    16.474172646256044

    File inviato

    38.29004097663836

    17.042919429207547

    File inviato

    38.46538284686022

    17.822486131335676

    File inviato

    39.21610322421954

    18.096142721859874

    File inviato

    39.85199325589654

    17.612290593484218

    File inviato

    39.78841857932453

    16.815781161638874

    File inviato

    39.08382945895416

    16.438921524671002

    File inviato

    Client terminate

    8.54125062346E-313

    3.66562523587626E-105

    File inviato

    tulipan

  2. #2
    Prova così...

    codice:
    public class Server {
        private static int port=2000;
        private static int T=0; 
        private Socket client;
        private DataInputStream input;
        private DataOutputStream output;
        private String idFile="2000";
        
      
      private boolean isDigit(String n) throws NumberFormatException{
        try{  
          Integer.parseInt(n);
          return true;
        }catch(NumberFormatException nfe){
           return false; 
        }
      }
      
      public Server(int port){
            this.port=port;
      } 
      private void Autenticate(){
          SecurityService s=new SecurityService();
          try{
              
              int c=input.readInt();
              System.out.println("idship= "+c);
              boolean risposta=s.login(c);
              if (risposta){
                  System.out.println("OK autenticazione riuscita");
                  output.writeUTF("ACK");
              }    
              else
                  output.writeUTF("NAK");
              output.flush(); 
          }catch(IOException ioex){
              System.err.println(ioex.getMessage());
          }
      }
      public void Start() throws IOException {
             int c=-1; 
             try{
                 System.out.println ("Server in partenza sulla porta " + port);
                 ServerSocket server = new ServerSocket(port);
                 System.out.println ("Server partito sulla porta " + server.getLocalPort() ) ;
              while(true){
                 System.out.println ("In attesa di connessioni...");
                 client = server.accept ();
                 System.out.println ("Richiesta di connessione da " + client.getInetAddress ());
                 input =new DataInputStream(new BufferedInputStream (client.getInputStream()));
                 output = new DataOutputStream( new BufferedOutputStream(client.getOutputStream()));
                 do{
                    try{
                    
                     c=input.readInt();
                    
                    switch(c){
                      case 10:
                         output.writeUTF("OK");
                         output.flush();
                         Autenticate();
                         break;
                      case 30:
                         System.out.println("Client terminate");
                         client=null;
                         break;
                      case 40:
                         double lat=input.readDouble();
                         System.out.println(lat);
                         double lon=input.readDouble();
                         System.out.println(lon);
                         break;
                      case 50:
                         System.out.println("File inviato");
                         break;
                      default:   
                         ;
                     }             
                    }catch(IOException ioex){
                        System.err.println(ioex.getMessage());
                    }
                 }while(!(c==30));
                 input.close();
                 output.close();
                 
              }
             } 
             catch(EOFException ex){
                 System.out.println("Client ha terminato la connessione");
             }catch(IOException ioe){
                 System.err.println(ioe.getMessage());
             }
      }
    }
    Ti sei dimenticato di usare la parola chiave "break"... per come hai scritto il codice tu, quando entri nel blocco con "10" esegui il case 10,30,40,50 se entri con "30" esegui 30,40,50 ecc ecc.

    Ps: attento ai titoli dei post :master: :master:

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Invece che chiamare la discussione "Problema strano", che non dice nulla né sulla natura del problema, né sul programma in questione, il regolamento impone che vengano utilizzati dei titoli significativi.

    Correggo.


    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

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.