`

SMB/JCIFS协议,共享文件的上传和下载

阅读更多
SMB共享文件的上传和下载参考:
http://dongisland.iteye.com/blog/1453613

SMB(Server Message Block):通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。SMB使用了NetBIOS的应用程序接口 (Application Program Interface,简称API)。另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超过120个函数,甚至Windows NT也没有全部支持到,最近微软又把 SMB 改名为 CIFS(Common Internet ile System),并且加入了许多新的特色。  
SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445

CIFS(Common Internet File System):通用Internet文件系统
 在windows主机之间进行网络文件共享是通过使用微软公司自己的CIFS服务实现的。 
  CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机的服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议现在是局域网上用于服务器文件访问和打印的协议。象SMB协议一样,CIFS在高层运行,而不象TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。
  CIFS 可以使您达到以下功能:
  1.访问服务器本地文件并读写这些文件
  2.与其它用户一起共享一些文件块
  3.在断线时自动恢复与网络的连接
  4.使用西欧字符文件名
  一般来说,CIFS使用户得到比FTP更好的对文件的控制。它提供潜在的更直接地服务器程序接口,这比使用HTTP协议的浏览器更好。CIFS最典型的应用是windows用户能够从“网上邻居”中找到网络中的其他主机并访问其中的共享文件夹.
CIFS 是开放的标准而且已经被作为Internet应用程序标准被提交到IETF。

开源项目—JCIFS
JCIFS是CIFS 在JAVA中的一个实现,是samba组织负责维护开发的一个开源项目,专注于使用java语言对cifs协议的设计和实现。他们将jcifs设计成为一个完整的,丰富的,具有可扩展能力且线程安全的客户端库。这一库可以应用于各种java虚拟机访问遵循CIFS/SMB网络传输协议的网络资源。类似于java.io.File的接口形式,在多线程的工作方式下被证明是有效而容易使用的。
  JCIFS的开发方法类似java的文件操作功能,它的资源url定位:smb://{user}:{password}@{host}/{path},smb为协议名,user和password分别为共享文件机子的登陆名和密码,@后面是要访问的资源的主机名或IP地址。最后是资源的共享文件夹名称和共享资源名。例如 smb://administrator:122122@192.168.0.22/test/response.txt。
  在JAVA程序中,使用如下方式获得一个远程共享文件的句柄:SmbFile file = new SmbFile("smb://guest:1234@192.168.3.56/share/a.txt");这里的句柄不仅限于远程的共享文件,还可能是共享文件夹。isFile()方法和isDirectory()用来判断这个句柄对应的资源的真实属性。如果是共享文件夹,通过调用它的list()方法将获得其中资源的列表。List方法支持过滤器机制,有两种过滤器可供使用,一种是SmbFileFilter,另一种是SmbFilenameFilter,这两个在jcifs中作为接口出现,你可以根据自己的需要派生出个性化的过滤器,实现接口中的accept方法,以满足不同业务的需求。
参考网站:http://jcifs.samba.org/

JAVA中的CIFS实现
 Jcifs是CIFS在JAVA中的一个实现,是samba组织本着linux的精神,负责维护开发的一个开源项目。这个项目专注于使用java语言对cifs协议的设计和实现。他们将jcifs设计成为一个完整的,丰富的,具有可扩展能力且线程安全的客户端库。这一库可以应用于各种java虚拟机访问遵循CIFS/SMB网络传输协议的网络资源。类似于java.io.File的接口形式,在多线程的工作方式下被证实是有效而轻易使用的。

简单示例:
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileInputStream;
public class RemoteAccessData {
public static void main(String[] args) {
    try {
      SmbFile smbFile = new SmbFile("smb://guest:1234@192.168.3.56/share/a.txt");
      int length = smbFile.getContentLength();//得到文件的大小
      byte buffer[] = new byte[length];
      SmbFileInputStream in = new SmbFileInputStream(smbFile); //建立smb文件输入流
      while ((in.read(buffer)) != -1) {
        System.out.write(buffer);
        System.out.println(buffer.length);
      }
      in.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
}
}

remoteUrl说明:
如果是无需密码的共享,则类似如下格式:
   smb://ip/sharefolder(例如:smb://192.168.0.77/test)
如果需要用户名、密码,则类似如下格式:
   Smb://username:password@ip/sharefolder(例如:smb://chb:123456@192.168.0.1/test)
 
注:jcifs.smb包下的很多方法,如SmbFile,SmbFileInputStream,SmbRandomAccessFile等等很多类,基本上和java.io包下的文件读写类
基本相同的,大体上在jdk的io类前面加上了它的标识“Smb”。
分享到:
评论

相关推荐

    Java对Samba进行上传与下载文件-jcifs

    在实际应用中,"sambatest"可能是一个包含示例代码的项目,包括了具体的Samba文件上传和下载功能。这个项目可以作为学习和参考,帮助理解如何将jcifs库集成到Java应用中,实现与Samba服务器的交互。 总的来说,Java...

    JAVA SMB共享文件夹操作文件jar支持smb2、smb3.rar

    Java SMB(Server Message Block)库是用于在Java应用程序中访问和操作网络共享文件系统的工具,主要应用于Windows环境,但也可支持其他支持SMB协议的系统。SMB是一种网络通信协议,允许网络上的计算机共享文件、...

    Android读取SMB服务器资源或者下载资源文件

    在Android平台上,访问和下载SMB(Server Message Block)服务器上的资源是一项常见任务,尤其是在企业环境中,SMB常用于共享文件和数据。SMB是一种网络文件系统协议,它允许网络上的计算机共享文件、打印机和其他...

    利用jcifs-1.3.15.jar实现共享文件上传下载

    下面将详细介绍如何利用jcifs-1.3.15.jar实现共享文件的上传和下载功能。 首先,我们需要了解jcifs的基本用法。jcifs库提供了SmbFile类,该类是文件操作的核心,类似于Java的java.io.File类。通过SmbFile对象,我们...

    使用smbj.jar访问共享文件夹,解决SMB2/SMB3共享文件夹访问的问题

    使用smbj.jar访问共享文件夹,支持SMB2/SMB3,用于解决使用jcifs.jar不支持SMB2/SMB3的问题

    jcifs-1.3.17.jar

    1. **文件上传**:JCIFS库提供了API,使得Java程序能够将本地文件上传到网络上的共享目录。通过创建SmbFile对象并调用其writeFile或OutputStream方法,可以实现文件的上传操作。 2. **文件下载**:同样,JCIFS库也...

    java访问共享文件

    标题“Java访问共享文件”指的是使用Java编程语言来操作网络上的共享文件系统,这通常涉及到Windows的SMB(Server Message Block)协议或者更现代的CIFS(Common Internet File System)协议。这篇博客文章可能详细...

    java 操作windows 共享目录方法介绍

    本文详细介绍了如何使用Java语言结合jcifs库操作Windows共享目录的方法,主要包括了SMB协议的基本概念及其在Windows系统中的应用,以及jcifs库的功能特点和具体使用示例。通过对这些内容的学习,开发者可以更好地...

    java操作网络共java-smb2

    java操作网络共享 smb2协议 使用smbj.jar访问共享文件夹,解决SMB2/SMB3共享文件夹访问 使用smbj.jar访问共享文件夹,支持SMB2/SMB3,用于解决使用jcifs.jar不支持SMB2/SMB3的问题

    JAVA下载远程Linux服务器的文件

    在Java编程中,有时我们需要与远程Linux服务器进行交互,例如下载或上传...总之,通过Java结合jcifs库,我们可以轻松地实现在Linux服务器上执行SMB协议,进行文件的下载和上传,这对于跨平台的文件操作需求非常有用。

    jcifs的拓展包ext

    JCIFS是一个开源的Java库,实现了SMB(Server Message Block)协议,允许Java应用程序访问Windows网络共享资源,如文件和打印机。在某些情况下,jcifs-ext提供了更高级的功能或者修复了原版jcifs中的问题,以满足...

    jcifs-1.3.17-sources.jar

    1. **文件上传**:jcifs库允许开发者编写代码将本地文件上传到网络共享,这在分布式系统或者跨平台协作中非常有用。通过SmbFile类,可以创建一个代表网络路径的对象,并调用相关方法进行文件的上传操作。 2. **文件...

    NETsend.zip

    - 使用开源库如`jcifs-ng`来实现SMB/CIFS协议,创建Samba服务器并与Windows设备共享文件。 4. 自定义应用协议: - 开发者可以构建基于TCP/UDP的自定义协议,实现文件传输逻辑。 - 利用`Socket`类进行网络编程,`...

    上传文件到samba服务器

    Samba是一个开源软件,允许Linux/Unix系统与Windows网络共享文件,实现了SMB/CIFS(Server Message Block/Common Internet File System)协议。 首先,我们需要理解SMB协议。这是一种广泛使用的网络文件共享协议,...

    ReadSambaFile:使用 jcifs java 库从 Samba 读取文件

    jcifs库还提供了许多其他功能,如文件上传、目录操作、权限管理等,你可以根据需要进一步探索。 在实际项目中,考虑到安全性,你可能需要使用更安全的身份验证机制,例如通过SSO(单点登录)或集成Active Directory...

    java读取win共享文件夹

    - 使用`java.net.Socket`类建立与Windows共享文件服务器的TCP连接。共享文件夹通常是基于SMB(Server Message Block)协议的,Java没有直接支持SMB的类,但可以通过第三方库如jcifs(Java SMB Client)来实现。 - ...

    android samba 测试工程

    SMB协议是一个客户端-服务器协议,它允许网络上的计算机共享文件、打印机、串行端口和其他类型的资源。SMB2和SMB3是较新的版本,提供了更高的性能和安全性。 2. **Android Samba库**:在Android上实现Samba功能,...

    ClientFileSharing:服务器文件共享 <===> 客户端文件共享

    Java的NIO(New Input/Output)库提供了非阻塞I/O操作,这在处理多个并发连接时非常有用,特别是对于文件上传和下载这种数据密集型任务。此外,Java RMI(Remote Method Invocation)也可用于实现远程对象的共享,...

    ServerFileSharing:服务器文件共享 <===> 客户端文件共享

    在实际开发中,开发者可以利用如Spring框架提供的文件上传和下载功能,结合数据库存储用户信息和权限,构建一个完整的服务器文件共享系统。同时,客户端可以通过Java的HTTP客户端库如Apache HttpClient或OkHttp来与...

Global site tag (gtag.js) - Google Analytics