2016-01-21 49 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