2013-04-22 94 views
2

Server.java異常線程 「main」 java.net.SocketException異常:連接復位

public class Server { 
    public static BufferedReader inFromClient = null; 
    public static DataOutputStream outToClient = null; 
    public static Socket connectionSocket = null; 
    static ServerSocket welcomeSocket = null; 
    static String path = null; 

    public static void main(String[] args) throws IOException { 
     welcomeSocket = new ServerSocket(1001); 

     FileInputStream fin = null; 
     FileOutputStream fout = null; 

     while (true) { 

      connectionSocket = welcomeSocket.accept(); 

      inFromClient = new BufferedReader(new InputStreamReader(
        connectionSocket.getInputStream())); 

      outToClient = new DataOutputStream(
        connectionSocket.getOutputStream()); 
      path = inFromClient.readLine(); 

      if (path != null) { 
       String fileName = new File(path).getName(); 

       File file = new File(path); 
       File file2 = new File(fileName); 

       fin = new FileInputStream(file); 

       fout = new FileOutputStream(file2); 

       byte[] buffer = new byte[1024]; 
       int bytesRead; 
       while ((bytesRead = fin.read(buffer)) > 0) { 
        fout.write(buffer, 0, bytesRead); 
       } 

       fin.close(); 
       fout.close(); 
      } 

     } 
    } 
} 

我得到這個錯誤

Exception in thread "main" java.net.SocketException: Connection reset 
    at java.net.SocketInputStream.read(Unknown Source) 
    at java.net.SocketInputStream.read(Unknown Source) 
    at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) 
    at sun.nio.cs.StreamDecoder.implRead(Unknown Source) 
    at sun.nio.cs.StreamDecoder.read(Unknown Source) 
    at java.io.InputStreamReader.read(Unknown Source) 
    at java.io.BufferedReader.fill(Unknown Source) 
    at java.io.BufferedReader.readLine(Unknown Source) 
    at java.io.BufferedReader.readLine(Unknown Source) 
    at Server.main(Server.java:37) 

這裏是什麼,我要怎樣做。

運行Server.java後運行Client.java。我試着按選擇按鈕,但沒有選擇任何文件,然後關閉文件選擇器。

在我的理解是,這條線

path = inFromClient.readLine(); 

當它試圖READLINE,但沒有找到任何這就是爲什麼它說未知源,但我要如何解決這個問題?

在我Client.java我試圖close()插座,但它不是關閉在所有....

UPDATE我已經將嘗試在錯誤發生server.java &抓固定的錯誤,並解決了這個問題!

+0

'try/catch'不能解決任何問題。它改變了行爲。 – EJP 2017-08-04 10:20:57

回答

3

當它試圖READLINE,但沒有找到任何這就是爲什麼它說未知源

不,它不是。這是指這樣的事實,即有關的源代碼沒有用調試信息編譯,因此當打印堆棧跟蹤時源代碼行和文件不可用。

這種情況最常見的解釋是您已寫入已被對等方關閉的連接:換句話說,應用程序協議錯誤。

爲什麼要編寫一個服務器,其功能是根據來自客戶端的輸入將文件從一個位置複製到另一個位置?

相關問題