0

我的应用程序包含一个连续循环。在循环的每次迭代中,通过 Socket 到服务器执行 5 到 200 个事务。

以前,我为每个事务创建一个新的 Socket。但是,我认为尽可能重用 Socket 会更好。由于我在网上找不到任何关于重用套接字的正确方法的代码示例,我希望我以正确的方式完成了它。

如果有人对改进此代码有任何建议,将不胜感激。

Socket socket = null;
boolean reuseSocket = true;

//This method is called between 5 and 150 times, every 10 seconds.
public String getViaSocket(String commandString) throws Exception {
    StringBuilder sb = new StringBuilder();

    OutputStream socketOutputStream = null;
    InputStream socketInputStream = null;
    try {

        if (!reuseSocket || socket == null || socket.isClosed()) {
            socket = new Socket(HTCS_IP_ADDRESS, HTCS_PORT_NUM);
        }

        if (reuseSocket) {
            socket.setKeepAlive(true);
        }
        else {
            socket.setKeepAlive(false);
        }
        socket.setSoTimeout(20  * 1000);
        socket.setSoLinger(false, 0);

        socketOutputStream = socket.getOutputStream();
        socketOutputStream.write(commandString.getBytes());
        socketOutputStream.flush();

        socketInputStream = socket.getInputStream();
        int b;
        do {
            b = socketInputStream.read();
            sb.append((char)b);
        }
        while(!isEndOfResponse(b, sb));

        return sb.toString();
    }
    finally {

        try {
            if (socketOutputStream != null) {
                socketOutputStream.close();
            }
        }
        catch(Exception e) {}

        try {
            if (socketInputStream != null) {
                socketInputStream.close();
            }
        }
        catch(Exception e) {}

        try {
            if (!reuseSocket && socket != null && !socket.isClosed()) {
                socket.close();
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }

}

Jim Garrison、EJP、Jarrod Roberson 和 Łukasz Lech,如果这是另一个问题的重复,你能告诉我你认为它重复了哪个问题吗?

4

0 回答 0