2016-10-13 11 views
-1

サーバーの文字列から文字列(ファイルから1行ずつ)でテキストファイルを読み込もうとしています。StringのreadObjectで例外が発生しました

クライアント側のreadObjectが何も読み込めず、例外を取得して「クライアントエラー」に行くまで正常に動作します。

私はストリームとソケットを閉じようとしました。質問をしていますが、私はスキャナを使用しようとしましたが、上のオプションのどれも私を助けませんでした。

私を助けることができますか?

クライアント側:

package hit.model; 

import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.util.ArrayList; 
import javax.swing.JOptionPane;  

public class MMUClient { 
    private ArrayList<String> userDetails; 
    private String fileFromServer =null; 
    private ObjectOutputStream outToServer; 
    private ObjectInputStream inFromServer; 
    private String fileName; 
    private boolean ERROR = true; 
    private String messageError = "No Errors"; 
    private PrintWriter printerWriter; 

    public MMUClient(ArrayList<String> userParameters){ 
     userDetails = userParameters; 
    }; 

    public MMUClient(String filePath){ 
     fileName = filePath; 
    }; 

    public ArrayList<String> getUserDetails() { 
     return userDetails; 
    } 

    public void setUserDetails(ArrayList<String> userDetails) { 
     this.userDetails = userDetails; 
     clientAuthenticate(); 
    } 

    public void clientAuthenticate(){ 
     try{ 
      Socket myServer = null; 
      try { 
        //1. creating a socket to connect to the server 
        myServer = new Socket("localhost", 12345); 
        System.out.println("Connected to localhost in port 12345"); 
        //2. get Input and Output streams 
        outToServer = new ObjectOutputStream(myServer.getOutputStream()); 
        inFromServer=new ObjectInputStream(myServer.getInputStream()); 
        //3: Communicating with the server 
        outToServer.writeObject(userDetails); 
        //4. get server answer 
        fileFromServer = (String) inFromServer.readObject(); 
        printerWriter = new PrintWriter("logClient.txt"); 
         if(fileFromServer.contains("Error")){ 
          messageError = "Error"; 
          ERROR = true; 
         } 
         else{ 
          if (fileFromServer.contains("Wrong")){ 
           messageError = "Wrong"; 
           ERROR = true; 
          } 
          else 
           while(fileFromServer != null){ 
           // messageError = "No Errors"; 
           // ERROR = false; 
            System.out.println(fileFromServer); 
            printerWriter.println(fileFromServer); 
           // writeData(fileFromServer); 
            fileFromServer = (String) inFromServer.readObject(); 
           } 

           printerWriter.close(); 
         }      

       } catch (IOException e) { 
        System.out.println("Client error"); 
       }finally{ 
        inFromServer.close(); 
        outToServer.close(); 
        myServer.close(); 
       } 

      }catch (Exception e) { 
       System.out.println("Client error Details"); 
      }   
     } 


//**********************write into text file from server*************************** 
/* private void writeData(String lineToWrite) { 
     FileWriter fileWriter = null; 
     String filetowrite = "logClient.txt"; 
     try { 
       PrintWriter printerWriter = new PrintWriter(filetowrite); 
       printerWriter.println(lineToWrite); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }   
    } 
*/ 
//************************if there is any error with the client****************************** 
    public boolean getError(){ 
     return ERROR; 
    } 

    public String getMessageError() { 
     return messageError; 
    } 

    public void setMessageError(String messageError) { 
     this.messageError = messageError; 
    } 
} 

サーバー側:その答えのための

package hit.applicationservice;  

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.net.Socket; 
import java.util.ArrayList; 
import java.util.Scanner; 
import hit.login.AuthenticationManager; 

public class MMULogFileApplicationService implements Runnable { 

    //MMULogService logService; 
    AuthenticationManager authenticateDetails; 
    MMULogFileBrowsing browsing; 
    ArrayList<String> userDetails; 
    private Socket someClient = null; 
    private ObjectOutputStream outToClient; 
    private ObjectInputStream inFromClient; 
    String filePath = "/Users/oferg/Desktop/lastVirsion/MMUProject/log.txt"; 

    public MMULogFileApplicationService (Socket socket){ 
     someClient = socket; 
    }; 

    @Override 
    public void run() { 
     //3. get Input and Output streams 
     try{ 
     outToClient = new ObjectOutputStream(someClient.getOutputStream()); 
     inFromClient = new ObjectInputStream(someClient.getInputStream()); 
     userDetails = (ArrayList<String>) inFromClient.readObject(); 
     System.out.println("Connection successful "); 
     }catch(IOException | ClassNotFoundException ioException){ 
      ioException.printStackTrace(); 
     } 
     boolean userFound = false; 
     try { 
      authenticateDetails = new AuthenticationManager(); 
      userFound = authenticateDetails.authenticate(userDetails.get(0), userDetails.get(1)); 
      if(userFound) 
      { 
       browsing = new MMULogFileBrowsing(someClient, userDetails.get(2), filePath); 
       if(!browsing.searchIfFileExist()){  
        //write object to Socket 
        String sendMessage = "Wrong FileName the file isn't found"; 
        outToClient.writeObject(sendMessage); 
        } 
       else{ 
        getFileToClient(); 
       }      
      } 
      else 
      { 
       //write object to Socket 
       String sendMessage = "Error - the user isn't exist"; 
       outToClient.writeObject(sendMessage); 
      } 
     } catch (ClassNotFoundException | IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }finally{ 
      try { 
       inFromClient.close(); 
       outToClient.close(); 
       someClient.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      }    
     }    
    } 

    private void getFileToClient() throws IOException { 
     FileReader fileReader = null; 
     String currentLine = null; 

     try { 
      fileReader = new FileReader(filePath); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     BufferedReader bufferedReader = new BufferedReader(fileReader); 
      while ((currentLine = bufferedReader.readLine())!= null){ 
       if (currentLine.isEmpty() == false){ 
        outToClient.writeObject(currentLine); 
        outToClient.flush(); 
       } 
      } 
      outToClient.close(); 
      bufferedReader.close(); 
      fileReader.close(); 
     } 
} 
+1

;' 'outToClient.flush()を行います;'。 – Shadov

+4

質問を投稿する前に、問題がまだ存在する最も単純な例にコードを圧縮する必要があります。 –

+2

StackExchangeでテキストを使用しないでください。 – oldtechaa

答えて

0

TNXのみなさん。

String currentLine = ""; 
BufferedReader bufferedReader = new BufferedReader(fileReader); 
    while ((tempLine = bufferedReader.readLine())!= null){ 
     if (tempLine.isEmpty() == false){ 
      currentLine = currentLine+tempLine+"\n"; 
     } 
    } 
その方法で

私はラインで、テキストファイルの行をコピーして1列でクライアントに送信していますし、: 私は次の単純なループコードでアルにテキストファイルを渡す方法を見つけたと思います私が望むものは何でもできるよりも。

tnx every1。 `outToClient.writeObject(のsendMessage)の後に、サーバ側では 平和

関連する問題