没有使用套接字请求进行日志记录

时间:2014-04-19 13:27:47

标签: java sockets

所以我有这个功能:

 public HashMap<String, Object> ping(String ip, int port) {
    try {
        Socket sock = new Socket();
        sock.setSoTimeout(1000);
        sock.connect(new InetSocketAddress(ip, port), 1000);

        DataOutputStream out = new DataOutputStream(sock.getOutputStream());
        DataInputStream in = new DataInputStream(sock.getInputStream());

        out.write(0xFE);

        int b;
        StringBuilder str = new StringBuilder();
        while ((b = in.read()) != -1) {
            if (b != 0 && b > 16 && b != 255 && b != 23 && b != 24) {
                str.append((char) b);
                System.out.println(b + ":" + ((char) b));
            }
        }

        String[] data = str.toString().split("§");
        String serverMotd = data[0];
        int onlinePlayers = Integer.parseInt(data[1]);
        int maxPlayers = Integer.parseInt(data[2]);

        HashMap<String, Object> map = new HashMap<>();

        map.put("motd", serverMotd);
        map.put("online", onlinePlayers);
        map.put("max", maxPlayers);

        return map;

    } catch (UnknownHostException e) {
    } catch (IOException e) {
    }
    return null;
}

它可以工作,但用以下内容和大量内容填充日志。我怎么能摆脱这个?

[13:26:41 INFO]: 32:
[13:26:44 INFO]: 115:s
[13:26:44 INFO]: 32:
[13:26:44 INFO]: 38:&
[13:26:44 INFO]: 114:r
[13:26:44 INFO]: 105:i

忽略这一点:我非常确定这是一个简单的解决方案所以我只是填补空间,因为看起来我的答案主要是代码,但我还有更多要说的。

更新:号码后面的每个字符都是响应的一部分。例如,如果它是一个字符串“lol”,将记录其中三个消息,每个字母一个。

1 个答案:

答案 0 :(得分:2)

它看起来像是system.out的内容。应用程序服务器将标准输出和错误流重定向到其日志。如果你想摆脱它,那就注释掉那条线。

System.out.println(b + ":" + ((char) b));