jcifs.smb.SmbException: Failed to connect: 0.0.0.0<00>/IP 解决方案

因为业务原因,现在内网系统使用共享文件夹方式进行文件的输入输出,Java开发,使用的Jar包为jcifs,在本地测试完全正常,部署到正式环境后出现:

jcifs.smb.SmbException: Failed to connect: 0.0.0.0<00>/IP的异常,解决方式如下:

分析原因

查询jcifs的网站(http://www.jcifs.org/)

上述部分明确提到了,jsifs仅支持SMB1,而不支持SMB2/SMB3,所以先从服务器支持协议入手

服务器为windows服务器,在服务器上打开powershell控制台(在开始->运行->输入 powershell即可)

获取 SMB1和SMB2 服务器协议配置的当前状态,输入:

Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol

输出为:

可以看出当前服务器SMB1未开启,尝试开启SMB1,

在powershell控制台输入:

Set-SmbServerConfiguration -EnableSMB1Protocol $true

报错,指定服务不存在,所以当前的服务器不支持SMB1,到此,原因找到了,因为本地使用的机器支持SMB1所以可以正常运行jcifs的功能,但是正式环境的服务器不支持SMB1,所以报错

解决问题

当前解决思路为替换jar包(如果有更好的方式,欢迎私信)

jcifs的网站上提供了两种支持SMB2/SMB3的方式

当前解决时选用的方式为smbj(github地址:https://github.com/hierynomus/smbj)

第一步: 下载jar包,可以去https://mvnrepository.com/search下载(只能下载smbj.jar包,在实际运行时还需要导入一些辅助jar包,具体参照github上的gradle.properties),也可以去我上传的资源:https://download.csdn.net/download/u013092293/10766117进行下载(内附所需的jar包和一个demo)

第二步: 参照github官方的文档进行编写代码,链接共享文件夹

实测成功

到此,问题解决,如按上述流程有任何问题,欢迎私信

猜你喜欢

转载自blog.csdn.net/u013092293/article/details/83753520