繁体   English   中英

Java socketserver如何测试?

[英]Java socketserver how to test?

我想通过Java中的套接字连接接收文本文件,我设置了服务器端,但是在继续使用客户端之前,我想知道我编写的代码是否有效,除了我不知道如何进行测试。

任何帮助将非常感激..

编辑:我知道端口是开放的并且正在侦听请求,我想要的是测试如果接收到任何东西会发生什么,它将从输入中创建一个文件,我可以通过仿真来测试吗(发送我不知道的文件或字节)?

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();
            }
        }
    }

好吧,您的套接字将在端口8080上对吗?

您可以打开浏览器并输入: http:// localhost:8080 浏览器将创建一个连接,并且该行

服务器= listener.accept();

将“解锁”。 如果您只是想测试套接字是否在监听,它将起作用。 阅读流,您将看到HTTP协议的第一条消息。

首先,您可能在阅读循环中出现错误

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);
}

将其逐块存储到磁盘中。 在退出while循环之后, 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM