Java中的UNIX域套接字

19

4
第二个链接(forums.sun.com)已经失效,似乎跳转到Oracle的一个无意义的页面。顺便说一句,未找到archive.org上的存档。 - Tino
4个回答

24

2
截至2015年11月,《junixsocket》项目位于 https://github.com/kohlschutter/junixsocket。 - VirtualMichael
6
注意,它只支持 STREAM 模式的 Unix sockets。请用 netstat -ux 命令检查您的服务器打开了哪些内容。另请参阅“UNIX域STREAM和DATAGRAM套接字之间的区别”。 - Florian
回复@Florian的精彩评论:在现代系统上,netstat经常不可用,而iproute2包及其ss工具已取代它。在这种情况下,使用ss -lx查看监听UNIX域套接字的进程。 - Per Lundberg
junixsocket现在支持流和数据报套接字。 - Christian Kohlschütter

17

Java不能创建或访问Unix域套接字,除非使用第三方(本地)库。上面第二个链接的最后一条评论提到了这一点。

第一个链接提供了一些很好(且正确)的信息。


7
从 Java 16 开始,Unix 域套接字得到 SocketChannel / ServerSocketChannel API 的本地支持。 - Benny

8

4
请注意,它只支持流模式的Unix套接字。通过运行 netstat -ux 命令检查您的服务器打开了什么。还请参阅UNIX域STREAM和DATAGRAM套接字之间的区别 - Florian
1
请注意,Netty 4.0仅支持Unix域套接字的epoll(2),这意味着它不能在Linux之外使用。 - Low power

5

正如评论中 @Benny 所指出的那样,JDK 16 提供了内置支持 Unix 域套接字的功能,可通过 java.net.UnixDomainSocketAdress 和相关类实现。您可以在 JEP-380 中了解更多信息。

以下是 JEP 中的一段代码:

var unixAddr = UnixDomainSocketAddress.of("/foo/bar.socket");
var channel2 = SocketChannel.open(unixAddr);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接