2016-04-18 2 views
-1

сервераInputMismatchException с scanner.nextInt() над гнездом

import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Scanner; 

public class ServerLNS extends Thread { 

final static int porta=8888; 



public static void main(String[] args) 
{ 


    try 
    { 

     new ServerLNS().startServer(); //start server 

    } 

    catch (Exception ex) 
    { 
     System.out.println("Problema con Input/Output " + ex.getMessage());// 
    } 
} 

public void startServer() throws Exception 
{ 
    Scanner sc; 

    ServerSocket serverSocket=null; 
    Socket socket = null; 
    boolean ascoltando=true; 
    boolean b=true; 
    serverSocket = new ServerSocket(porta);//avvia il server con il numero di porta 
    // ****** interfaccia f=new interfaccia); 

     while(ascoltando) 
     { 

      socket = serverSocket.accept(); 

      new handlerClient(socket).start();//metodo ereditato dai thread che fa partire run e gestisce il client sul socket 
      //socket è la connessione virtuale tra un computer e un altro (INDIRIZZO) 

     } 

    //serverSocket.close(); 


} 

} 

ручка

package server; 

    import java.io.BufferedInputStream; 
    import java.io.BufferedReader; 
    import java.io.BufferedWriter; 
    import java.io.DataInputStream; 
    import java.io.FileOutputStream; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.OutputStreamWriter; 
    import java.io.PrintWriter; 
    import java.net.ServerSocket; 
    import java.net.Socket; 
import java.util.Scanner; 
    import java.util.logging.Level; 
    import java.util.logging.Logger; 


public class handlerClient extends Thread 
{ 

Socket _socket; 
String name = ""; 
String ok="OK"; 
Scanner sc; 
public handlerClient(Socket socket) throws IOException 
{ 
_socket=socket; 
} 
@Override 
public void run() //parte ill thread quando viene eseguito {(.start) in ServerLNS} 

{ 
    try //parte ill thread quando viene eseguito {(.start) in ServerLNS} 
    { 
     sc=new Scanner(_socket.getInputStream()); 
     FileOutputStream fout; 
     BufferedInputStream bis=null; 
     BufferedReader br1=null; 
     br1=new BufferedReader(new InputStreamReader(_socket.getInputStream())); 
     bis=new BufferedInputStream(_socket.getInputStream()); 
     String filename; 
     String nome_cartella; 
     filename=br1.readLine(); 
     nome_cartella=br1.readLine(); 

     System.out.println(filename); 
     fout=new FileOutputStream(nome_cartella+"/"+filename); 



     int size=sc.nextInt(); 
     System.out.println("file created"); 
     int ch=bis.read(); 
     System.out.println(ch); 
     System.out.println("after bis.read()"); 

     while(size>0) 
     { 
      fout.write(ch); 
      System.out.println(ch); 
      ch=bis.read(); 
      size--; 
     } 

     System.out.println(ch); 
     System.out.println("data written"); 
     PrintWriter pw1=new PrintWriter(_socket.getOutputStream(),true); 
     pw1.println("DATA UPLOADED SUCCESSFULLY"); 
    } catch (IOException ex) { 
     sc.nextInt(); 
     Logger.getLogger(handlerClient.class.getName()).log(Level.SEVERE, null, ex); 
    } 
     } 
} 

клиент

package clientprova; 

    import java.io.BufferedInputStream; 
    import java.io.BufferedOutputStream; 
    import java.io.BufferedReader; 
    import java.io.DataOutputStream; 
    import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.FileNotFoundException; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.PrintWriter; 
    import java.net.InetAddress; 
    import java.net.Socket; 


    public class ClientProva { 
    final static int porta=8888;//porta server dove si collegano i client 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) throws FileNotFoundException, IOException { 
    // TODO code application logic here 

int i; 
BufferedInputStream bis; 
BufferedOutputStream bos; 
PrintWriter pw; 
BufferedReader br; 
File file = new File("Selezione_012.png"); 


InetAddress host = InetAddress.getLocalHost(); 
Socket sock = new Socket(host.getHostName(), 8888); 

bis=new BufferedInputStream(new FileInputStream(file)); 
     bos=new BufferedOutputStream(sock.getOutputStream()); 
     pw=new PrintWriter(sock.getOutputStream(),true); 
     br=new BufferedReader(new InputStreamReader(sock.getInputStream())); 
     pw.println(file.getName()); 
     pw.println("prova"); 

    int ch=bis.read(); 
    int counter=0; 
    pw.println(file.length()); 

    while(counter<file.length()) 
    { 
     bos.write(ch); 
     System.out.println(ch); 
     ch=bis.read(); 
     counter++; 
    } 

    System.out.println(ch); 
    bos.write(ch); 
    bos.flush(); 
    // pw.flush(); 
    } 


} 

Извините за слишком большого количества кода у меня есть проблемы с этой линией HANDLE с ошибкой inputMismatchException, но это не происходит, когда я использую клиент с базовым сервером без мультиклиента - управление потоками, чтобы проверить, я вызвал boolean b = sc.hasNextInt до sc.nextInt int size =(), если multiclient дает мне false, я не понимаю проблему. Заранее спасибо

 fout=new FileOutputStream(nome_cartella+"/"+filename); 



     int size=sc.nextInt();<----------------------------------- 
     System.out.println("file created"); 

этот сервер работает, тот же первый сервер, но в этом сокете сервера не задан в качестве параметра резьбы, это может повлиять?

import java.io.BufferedInputStream; 
    import java.io.BufferedReader; 
    import java.io.DataInputStream; 
    import java.io.FileOutputStream; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.PrintWriter; 
    import java.net.ServerSocket; 
    import java.net.Socket; 
    import java.util.Scanner; 


    public class ServerProva { 

final static int porta=8888;//porta server dove si collegano i client 

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

    ServerSocket serverSocket=null; 

    boolean ascoltando=true; 
    boolean b=true; 
    serverSocket = new ServerSocket(porta);//avvia il server con il numero di porta 
    Socket s; 
    BufferedReader br1=null; 
    // ****** interfaccia f=new interfaccia); 
     String filename; 
     String nome_cartella; 
     boolean r=true; 
     BufferedInputStream bis=null; 
     Scanner sc; 
    FileOutputStream fout; 

    while(ascoltando) 
     { 

     s=serverSocket.accept();<--------------// this socket 


    br1=new BufferedReader(new InputStreamReader(s.getInputStream())); 
    bis=new BufferedInputStream(s.getInputStream()); 
     filename=br1.readLine(); 
     nome_cartella=br1.readLine(); 

      System.out.println(filename); 
      fout=new FileOutputStream(nome_cartella+"/"+filename); 
      sc=new Scanner(s.getInputStream()); 
      System.out.println(sc); 

      int size=sc.nextInt(); 
      System.out.println("file created"); 
      int ch=bis.read(); 
      System.out.println(ch); 
      System.out.println("after bis.read()"); 

      while(size>0) 
      { 
       fout.write(ch); 
       System.out.println(ch); 
       ch=bis.read(); 
       size--; 
      } 

      System.out.println(ch); 
      System.out.println("data written"); 
      PrintWriter pw1=new PrintWriter(s.getOutputStream(),true); 
      pw1.println("DATA UPLOADED SUCCESSFULLY"); 
     } 

    serverSocket.close(); 
} 

}

+2

Это форматирование ... это больно. – bcsb1001

+0

@ bcsb1001 Извините за это, я написал все в спешке – volcom

+0

HI, даже если вы заняты, если мой ответ полезен, можете ли вы взять минутку, чтобы выбрать мой ответ как принятый? Это поможет маленькой ошибке в StackOverflow быть более охотно участвовать здесь =) Большое спасибо в любом случае –

ответ

0

File.length() возвращается long, так что вы должны сделать long size = sc.nextLong() вместо этого.

Смежные вопросы