【问题标题】:sending System.out over socket通过套接字发送 System.out
【发布时间】:2012-06-08 09:40:23
【问题描述】:

如何将 System.out 的输出发送到套接字,例如打印作家?

我需要将控制台输出(std 和 err)上出现的任何内容发送到 PrintWriter,因此是一个套接字。

谢谢。

【问题讨论】:

标签: java sockets system.out


【解决方案1】:

也许你可以这样尝试:

OutputStream os = socket.getOutputStream(); // for example
PrintStream ps = new PrintStream(os);
System.setOut(ps);

【讨论】:

  • 我必须编辑大量代码才能使用 PrintStream,此时我正在使用 PrintWriter。关于如何将 System.setOut() 转换为 PrintWriter 的任何想法?如果它不可行,那么我将不得不切换到 PrintStream。谢谢
  • 你可以这样做:PrintWriter out = new PrintWriter(System.out, true);
  • 好的。但是我以后如何使用它?!?我的 PrintWriter 已经指向套接字: PrintWriter out = new PrintWriter(new OutputStreamWriter(m_clientSocket.getOutputStream()));然后我可以做例如out.println();你的输出不会打印到控制台而不是套接字吗?!?如果我错了,请纠正我,我必须尝试一下。
  • 此后如果你说 System.out.println("hello"),将被重定向到套接字
  • PrintWriter out = new PrintWriter(new OutputStreamWriter(m_clientSocket.getOutputStream())); OutputStream os = new WriterOutputStream(out); PrintStream ps = new PrintStream(os); System.setOut(ps);
【解决方案2】:

好吧,您可以,但请更具体地说明您的要求。如果要发送日志消息,最好使用 之类的日志框架,您可以在其中立即从ConsoleAppender 切换到SocketAppender

您还可以将System.out 替换为System.setOut() 并将输出重定向到其他目标。

如果您想重定向某个应用程序的整个输出,您也可以尝试一些 bash/nc 解决方法:

$ java -jar your_app.jar | nc some_server

【讨论】:

  • 使用日志框架似乎是个好主意,应该可以帮助我解决其他问题。谢谢。
猜你喜欢
  • 2014-08-10
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 2011-02-24
相关资源
最近更新 更多