首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java socketserver如何测试?

Java socketserver如何测试?
EN

Stack Overflow用户
提问于 2016-01-21 10:08:04
回答 2查看 70关注 0票数 1

我想通过java中的套接字连接接收文本文件,我设置了服务器端,但在继续使用客户端之前,我想知道我编写的代码是否可以工作,除非我不知道如何测试它。

任何帮助都将不胜感激..

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

代码语言:javascript
复制
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();
            }
        }
    }
EN

回答 2

Stack Overflow用户

发布于 2016-01-21 10:29:06

那么,您的套接字将在端口8080上打开,对吗?

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

服务器= listener.accept();

将会“解锁”。如果您只是想测试套接字是否正在侦听,那么它就可以了。读取流,您将看到HTTP协议的第一条消息。

票数 0
EN

Stack Overflow用户

发布于 2016-01-21 17:55:02

首先,在读取循环中可能会出现错误

代码语言:javascript
复制
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];,并像这样读取文件

代码语言:javascript
复制
while ((bytesRead = in.read(byteArray)) > 0 ) {
    current += bytesRead;
    bufferedOutputStream.write(byteArray, 0, bytesRead);
}

将其逐个存储到磁盘块中。在退出while循环之后,current将保存读取字节的总数。

从另一个线程发送文件,该线程将连接到服务器

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34914178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档