2016-01-21 19 views
1

我想在java中通過套接字連接接收文本文件,我設置了服務器端,但在繼續使用客戶端之前,我想知道我製作的代碼是否有效,除非我不知道如何測試。Java socketserver如何測試?

任何幫助將不勝感激..

編輯:我知道該端口是開放的監聽請求,我想是測試會發生什麼,如果它收到任何東西,將它從輸入創建一個文件我可以通過模擬來測試(發送一個文件或字節我不知道)?

public class Server { 

    private static int port = 8080; 
    private static int maxConnections = 100000; 

    // Listen for incoming connections and handle them 
    public static void startServer() { 
     int i = 0; 

     try { 
      ServerSocket listener = new ServerSocket(port); 
      Socket server; 

      System.out.println("Started server on port:" + port); 

      while ((i++ < maxConnections) || (maxConnections == 0)) { 
       RunServer connection; 

       server = listener.accept(); 
       RunServer conn_c = new RunServer(server); 
       Thread t = new Thread(conn_c); 
       t.start(); 

       System.out.println("Created new thread"); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

class RunServer implements Runnable { 
    private Socket server; 

    RunServer(Socket server) { 
     this.server = server; 
    } 

    public void run() { 
     int bytesRead; 
     int current = 0; 
     BufferedOutputStream bufferedOutputStream = null; 
     FileOutputStream fileOutputStream = null; 
     DataInputStream clientData = null; 
     File file = null; 

     try { 
      // creating connection. 
      System.out.println("connected."); 

      // receive file 
      byte[] byteArray = new byte[6022386]; 
      System.out.println("Please wait downloading file"); 

      // reading file from socket 
      InputStream inputStream = server.getInputStream(); 
      file = new File("toread.txt"); 
      clientData = new DataInputStream(inputStream); 
      fileOutputStream = new FileOutputStream(file); 
      bufferedOutputStream = new BufferedOutputStream(fileOutputStream); 
      bytesRead = inputStream.read(byteArray, 0, byteArray.length); 

      current = bytesRead; 
      do { 
       bytesRead = inputStream.read(byteArray, current, (byteArray.length - current)); 
       if (bytesRead >= 0) 
        current += bytesRead; 
      } while (bytesRead > -1); 

      bufferedOutputStream.write(byteArray, 0, current); 
      bufferedOutputStream.flush(); 

      ReaderHelper.readTextFile(file); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (NumberFormatException e) { 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (fileOutputStream != null) 
        fileOutputStream.close(); 
       if (bufferedOutputStream != null) 
        bufferedOutputStream.close(); 
       if (clientData != null) 
        clientData.close(); 
       if (server != null) 
        server.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

你,一個偶然的機會,想單元測試的代碼? – catzilla

回答

0

那麼,你的套接字將在端口8080右?

您可以打開瀏覽器並輸入:http://localhost:8080。瀏覽器將創建一個連接,並且該行爲

server = listener.accept();

將「解鎖」。如果你只是想測試套接字是否正在收聽,它會做。讀取流將會看到HTTP協議的第一條消息。

+0

我知道端口是開放的,聽取請求,我想要測試如果它收到任何東西會發生什麼,它會創建一個文件從輸入,我可以通過模擬測試(發送文件或字節我不知道如何來模擬這個)? – DatExchanges

0

起初,你在閱讀循環

byte[] byteArray = new byte[6022386]; 
//some code 
do { 
    bytesRead = inputStream.read(byteArray, current, (byteArray.length - current)); 
    if (bytesRead >= 0) 
     current += bytesRead; 
} while (bytesRead > -1); 

有可能出現的錯誤。如果文件長度大於byteArray.length這是可能的,那麼(byteArray.length - current)將爲負。

我建議你使用更小的數組,例如byte[] byteArray = new byte[8192];並讀取這樣的文件

while ((bytesRead = in.read(byteArray)) > 0) { 
    current += bytesRead; 
    bufferedOutputStream.write(byteArray, 0, bytesRead); 
} 

按塊存儲到磁盤塊中。而退出後,循環current將保存讀取字節的總數。從另一個線程

發送文件,該文件會連接到服務器

Socket clientSocket = new Socket("localhost", Server.port); 
BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
DataOutputStream output = new DataOutputStream(clientSocket.getOutputStream()); 
FileInputStream fileInput = new FileInputStream("fileName"); 
byte[] buffer = new byte[8192]; 
while(fileInput.read(buffer) != -1){ 
    output.write(buffer, 0, length); 
} 
//close resources