Java中的UNIX域套接字

Ato*_*Hic 15 java sockets unix-socket

我看到Java的这些线程UNIX套接字实现?http://forums.sun.com/thread.jspa?threadID=713266.

第二个链接说Java已经支持UNIX Domain Socket.如果那是真的我需要从Java实现什么类?

从第一个链接开始,它表示Java不支持UNIX Domain Socket.如果需要UNIX域套接字,则必须使用第三方库.

那么,这是什么?

Chr*_*ter 20

你可以使用junixsocket:https://github.com/kohlschutter/junixsocket

它通过JNI库提供AF-UNIX支持,利用Java Socket API.它甚至允许通过Unix套接字从Java(Connector/J)连接到MySQL.

  • 注意,它只支持STREAM模式下的Unix套接字.使用`netstat -ux`检查服务器打开的内容.另请参见[UNIX域STREAM和DATAGRAM套接字之间的区别](http://stackoverflow.com/questions/13953912). (5认同)
  • 截至2015年11月,*junixsocket*项目位于https://github.com/kohlschutter/junixsocket (2认同)

小智 16

如果不使用第三方(本机)库,Java无法创建或访问Unix域套接字.上面第二个链接的最后评论提到了这一点.

第一个链接上有一些好的(和正确的)信息.

  • 从 Java 16 开始,通过 SocketChannel / ServerSocketChannel API 原生支持 Unix 域套接字。 (2认同)

Leo*_*mes 5

从版本4.0.26开始,Netty也支持它:https://github.com/netty/netty/pull/3344

  • 注意,它只支持STREAM模式下的Unix套接字.使用`netstat -ux`检查服务器打开的内容.另请参见[UNIX域STREAM和DATAGRAM套接字之间的区别](http://stackoverflow.com/questions/13953912). (2认同)

Pau*_*bel 5

正如 @Benny 在评论中指出的,JDK 16 通过java.net.UnixDomainSocketAdress和相关类内置了对 unix 域套接字的支持。您可以在JEP-380阅读更多内容

以下是 JEP 的摘录:

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