【发布时间】:2014-10-12 10:30:28
【问题描述】:
我的项目旨在直接从 Java 中的/dev/log UNIX 域套接字读取日志消息。目前我正在使用junixsocket。下面是从 unix 套接字读取的客户端示例代码。
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import org.newsclub.net.unix.AFUNIXSocket;
import org.newsclub.net.unix.AFUNIXSocketAddress;
import org.newsclub.net.unix.AFUNIXSocketException;
public class SimpleTestClient {
public static void main(String[] args) throws IOException {
final File socketFile = new File("/dev/log");
AFUNIXSocket sock = AFUNIXSocket.newInstance();
try {
sock.connect(new AFUNIXSocketAddress(socketFile));
} catch (AFUNIXSocketException e) {
System.out.println("Cannot connect to server. Have you started it?\n");
System.out.flush();
throw e;
}
System.out.println("Connected");
InputStream is = sock.getInputStream();
byte[] buf = new byte[8192];
int read = is.read(buf);
System.out.println("Server says: " + new String(buf, 0, read));
is.close();
sock.close();
System.out.println("End of communication.");
}
}
上述代码无法连接到/dev/log。它抛出一个异常:
Cannot connect to server. Have you started it?
Exception in thread "main" org.newsclub.net.unix.AFUNIXSocketException: Protocol wrong type for socket (socket: /dev/log)
at org.newsclub.net.unix.NativeUnixSocket.connect(Native Method)
at org.newsclub.net.unix.AFUNIXSocketImpl.connect(AFUNIXSocketImpl.java:125)
at org.newsclub.net.unix.AFUNIXSocket.connect(AFUNIXSocket.java:97)
at org.newsclub.net.unix.AFUNIXSocket.connect(AFUNIXSocket.java:87)
at SimpleTestClient.main(SimpleTestClient.java:40)
我无法弄清楚如何解决这个问题。任何帮助都将不胜感激。
【问题讨论】:
-
在try块中依赖代码成功的代码应该在同一个try块中。这里真正的问题是连接失败,而不是读取失败。您只是打印它并继续,就好像它没有发生一样。不要写这样的代码。
-
@EJP - 是的,我知道程序无法连接到 /dev/log 套接字。我的问题是为什么它无法连接到套接字?我做错了什么?
-
错误信息询问“你开始了吗?”。答案是什么?
标签: java unix-socket