當我嘗試發送或接收文件時,我不斷收到此錯誤寫在下面。我試圖找到與調試每次停在這行時間的原因和:服務器執行期間eofexception FTP
ObjectInputStream Inputs = new ObjectInputStream (socket.getInputStream());
這些是出現在運行後,我進入了鍵盤文件的路徑錯誤:
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully (ObjectInputStream.java:2353)
at java.io.ObjectInputStream$BlockDataInputStream.readShort (ObjectInputStream.java:2822)
at java.io.ObjectInputStream.readStreamHeader (ObjectInputStream.java:804)
at java.io.ObjectInputStream. <init> (ObjectInputStream.java:301)
at ClientFTP.riceviFile (ClientFTP.java:101)
at ClientFTP.main (ClientFTP.java:44)
類ServerFTP
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class ServerFTP {
private final int PORTA=2000;
public static void main(String[] args) {
ServerFTP server = new ServerFTP();
try {
server.listen();
} catch (IOException e) {
e.printStackTrace();
}
}
// Metodo per l'ascolto sulla porta predisposta
private void listen() throws IOException {
ServerSocket server = new ServerSocket(PORTA);
System.out.println("Server FTP in ascolto ....");
// ciclo infinito per accettare connessioni
do {
Socket connessione = server.accept(); // accetto connessioni in ingresso
GestoreFTP gestore = new GestoreFTP(connessione);
gestore.run();
// inserisco un ritardo per il main
try {
Thread.sleep(100);
} catch (InterruptedException e){}
} while (true);
}
}
類GestoreFTP
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class GestoreFTP implements Runnable{
private final String DIRECTORY="C:\\ciao";
private Socket socket;
private Scanner input;
PrintWriter output = null;
private int opzione;
public GestoreFTP(Socket socket){
this.socket=socket;
try {
input = new Scanner(socket.getInputStream());
output = new PrintWriter(socket.getOutputStream(),true);
} catch (IOException e) {
e.printStackTrace();
}
opzione=input.nextInt();
}
public void run(){
if (opzione==1){
try {
System.out.println("Richiesto trasferimento file da: "+socket);
// intercetto lo stream di input
ObjectInputStream inputS= new ObjectInputStream(socket.getInputStream());
// eseguo un cast in file
File inputFile = (File) inputS.readObject();
// estraggo il nome del file ricevuto
// e predispongo un file di output
File outputFile = new File(DIRECTORY+"\\"+inputFile.getName());
// eseguo il salvataggio sul Server
salvaFile(inputFile, outputFile);
} catch (Exception e){
e.printStackTrace();
}
}
else {
try{
File fileDir = new File(DIRECTORY);
String[] fileList = fileDir.list();
for (int i=0;i<fileList.length;i++)
output.println(fileList[i]+"\n");
String fileDaInviare=input.nextLine();
File file=new File(fileDaInviare);
inviaFile(file);
} catch (Exception e){}
}
try {
socket.close();
} catch (IOException e){}
}
private void salvaFile(File in, File out) throws IOException{
System.out.println("Ricezione file "+in.getName()+" in corso...");
System.out.println("Dimensione file "+in.getName()+": "+in.length()+" byte");
// Apertura stream di input sul file inviato
FileInputStream inS = new FileInputStream(in);
// Apertura stream di output per salvare il nuovo file
FileOutputStream outS = new FileOutputStream(out);
// buffer per contenere una riga del file
byte [] buffer = new byte[1024];
// leggo una riga per volta e scrivo nel file destinazione
int i;
while((i=inS.read(buffer))!=-1){
outS.write(buffer);
}
// chiudo gli stream
inS.close();
outS.close();
System.out.println("...Trasferimento completato!");
}
private void inviaFile(File file) throws IOException{
ObjectOutputStream outS= new ObjectOutputStream(socket.getOutputStream());
outS.reset();
outS.writeObject(file);
outS.flush();
outS.close();
}
}
類ClientFTP
import java.io.*;
import java.net.*;
import java.util.*;
public class ClientFTP {
private final String SERVER="127.0.0.1";
private final String DIRECTORY="C:\\lavoro\\lodi";
private final int PORTA=2000;
private static int opzione;
public static void main(String[] args) {
String path="";
ClientFTP client= new ClientFTP();
Scanner scelta=new Scanner(System.in);
do{
System.out.println("Scegli un'opzione:");
System.out.println("1)invia file;");
System.out.println("2)ricevi file");
opzione=scelta.nextInt();
}while (opzione!=1&&opzione!=2);
//menu
//invia
if (opzione==1){
try {
File file;
// immissione percorso e nome file
System.out.println("Inserire il path completo (Es.: C:/prova/prova.txt): ");
Scanner tastiera = new Scanner(System.in);
try {
path=tastiera.nextLine();
tastiera.close();
} catch (InputMismatchException e){
System.err.println(e);
}
file=new File(path);
client.inviaFile(file);
} catch (IOException e){
e.printStackTrace();
}
}
//ricevi
else if (opzione==2){
try {
client.riceviFile();
} catch (IOException e){
e.printStackTrace();
}
}
}// main
private void inviaFile(File file) throws IOException{
Socket socket=null;
PrintWriter output=null;
try {
socket=new Socket(SERVER, PORTA);
output = new PrintWriter(socket.getOutputStream(),true);
} catch(UnknownHostException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
output.println(1);
ObjectOutputStream outS= new ObjectOutputStream(socket.getOutputStream());
outS.reset();
outS.writeObject(file);
outS.flush();
outS.close();
}
private void riceviFile() throws IOException{
Socket socket=null;
PrintWriter output=null;
Scanner input=null;
Scanner fileDaScegliere=null;
try {
socket=new Socket(SERVER, PORTA);
input = new Scanner(socket.getInputStream());
output = new PrintWriter(socket.getOutputStream(),true);
} catch(UnknownHostException e){
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
output.println(2);
//stampa il contenuto della cartella nel server
stampa(input);
//scelgo il file da prendere
System.out.println("Inserire il path completo (Es.: C:/prova/prova.txt): ");
fileDaScegliere = new Scanner(System.in);
String path=null;
try {
path=fileDaScegliere.nextLine();
fileDaScegliere.close();
} catch (InputMismatchException e){
System.err.println(e);
}
//invio il percorso
output.println(path);
// intercetto lo stream di input
try{
ObjectInputStream inputS= new ObjectInputStream(socket.getInputStream());
// eseguo un cast in file
File inputFile = (File) inputS.readObject();
// estraggo il nome del file ricevuto
// e predispongo un file di output
File outputFile = new File(DIRECTORY+"\\"+inputFile.getName());
// eseguo il salvataggio sul Server
salvaFile(inputFile, outputFile);
}catch (Exception e){
e.printStackTrace();
}
}
private void stampa(Scanner input){
Scanner ricezione=null;
ricezione=input;
String risposta;
while(input.hasNextLine()){
try {
risposta = input.nextLine(); // passo 3
System.out.println(risposta);
}catch (Exception e){}
}
}
private void salvaFile(File in, File out) throws IOException{
System.out.println("Ricezione file "+in.getName()+" in corso...");
System.out.println("Dimensione file "+in.getName()+": "+in.length()+" byte");
// Apertura stream di input sul file inviato
FileInputStream inS = new FileInputStream(in);
// Apertura stream di output per salvare il nuovo file
FileOutputStream outS = new FileOutputStream(out);
// buffer per contenere una riga del file
byte [] buffer = new byte[1024];
// leggo una riga per volta e scrivo nel file destinazione
int i;
while((i=inS.read(buffer))!=-1){
outS.write(buffer);
}
// chiudo gli stream
inS.close();
outS.close();
System.out.println("...Trasferimento completato!");
}
} // class