【DM版本】: v8.1.4.6
【操作系统】:macOS Tahoe26.4.1
【CPU】: Intel
【问题描述】*:
相同代码在 Windows 电脑上就没问题,但是在 mac 上就会报错,不能建立连接,尝试过增加以下参数,也尝试过更换驱动 jar 版本,均无效,但是在 mac 上通过SQLark百灵就能连接,请大佬们帮忙看下,感激不尽。
java.net.preferIPv4Stack java.net.preferIPv6Stack java.net.preferIPv4Addresses java.net.preferIPv6Addresses
代码如下
import java.sql.Connection;
import java.sql.DriverManager;
public class SimpleTest {
public static void main(String[] args) throws Exception {
Class.forName("dm.jdbc.driver.DmDriver");
Connection conn = DriverManager.getConnection("jdbc:dm://xxx.xxx.xxx.xxx:5236", "user", "password");
System.out.println("连接成功");
conn.close();
}
}
异常堆栈如下
Exception in thread "main" dm.jdbc.driver.DMException: 网络通信异常
at dm.jdbc.driver.DBError.throwException(DBError.java:732)
at dm.jdbc.b.a.a(DBAccess.java:232)
at dm.jdbc.b.a.c(DBAccess.java:574)
at dm.jdbc.driver.DmdbConnection.openConnection(DmdbConnection.java:624)
at dm.jdbc.desc.EP.connect(EP.java:159)
at dm.jdbc.desc.EPGroup$EPSelector.select(EPGroup.java:345)
at dm.jdbc.desc.EPGroup.connect(EPGroup.java:271)
at dm.jdbc.driver.DmDriver.do_connect(DmDriver.java:128)
at dm.jdbc.driver.DmDriver.connect(DmDriver.java:413)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at test.SimpleTest.main(SimpleTest.java:10)
Caused by: java.net.SocketException: Bad file descriptor (Write failed)
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)
at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
at dm.jdbc.b.a.c.a(ByteArrayNode.java:154)
at dm.jdbc.b.a.a.a(Buffer.java:402)
at dm.jdbc.b.a.d(DBAccess.java:301)
at dm.jdbc.b.a.a(DBAccess.java:221)
... 10 more

1、本地是否有防火墙之类配置,考虑把工程使用的java加入看看;
2、看你后面有个Caused by: java.net.SocketException: Bad file descriptor (Write failed)
工程所在目录是否为敏感权限目录,也可以检查看看,或者尝试移动到一个临时全英文路径目录下,给777权限后再尝试排除一下。