用Java实现Socket及ftp下载
Java操作ftpClient常用方法

Java操作ftpClient常用方法1.连接FTP服务器- connect(host: String, port: int): 建立与FTP服务器的连接。
- login(username: String, password: String): 登录FTP服务器。
2.设置工作目录- changeWorkingDirectory(path: String): 切换当前工作目录。
- printWorkingDirectory(: 获取当前工作目录。
- storeFile(remoteFileName: String, inputStream: InputStream): 上传文件到FTP服务器。
4.删除文件- deleteFile(remoteFileName: String): 删除FTP服务器上的文件。
5.列出目录中的文件- listFiles(remotePath: String): 返回指定目录中的文件列表。
6.创建和删除目录- makeDirectory(directory: String): 在FTP服务器上创建目录。
- removeDirectory(directory: String): 删除FTP服务器上的目录。
7.设置传输模式和文件类型- setFileType(fileType: int): 设置文件类型(ASCII或二进制)。
- setFileTransferMode(mode: int): 设置传输模式(主动或被动)。
8.设置数据连接模式- enterLocalPassiveMode(: 设置被动模式。
- enterLocalActiveMode(: 设置主动模式。
9.设置缓冲大小和字符编码- setBufferSize(bufferSize: int): 设置缓冲区大小。
- setControlEncoding(encoding: String): 设置字符编码。
10.断开与FTP服务器的连接- logout(: 登出FTP服务器。
用Socket编程实现FTP

格式:int PASCAL FAR select(int nfds,fd_set FAR * readfds,fd_set FAR * writefds, fd_set FAR * exceptfds,const struct timeval FAR * timeout); 参数:readfds:指向要做读检测的指针 writefds:指向要做写检测的指针 exceptfds:指向要检测是否出错的指针 timeout:最大等待时间
连接管理:
数据连接有 3 大用途: (1) 从客户向服务器发送一个文件 (2) 从服务器向客户发送一个文件 (3) 从服务器向客户发送文件或目录列表。
每一个数据连接对传输一个文件或目录序列都要建立一个新的连接。 (1) 客户发出命令要求建立数据连接 (2) 客户在客户主机上未数据连接选择一个固定的端口号 (3) 客户使用 PORT 命令从控制连接上把端口号发给服务器。 (4) 服务器在控制连接上接收端口号,并向客户端主机上的端口发出主动打开,服务器的数据连接 使用端口 21。
服务器端程序则持续的监听网络。当接受到客户端的 Socket ,服务器程序提供相应的服务。网络通 信模块使用 POP3 控件来实现客户端与服务器的信息交流。
函数功能和流程如下:(1)首先创建一个 CFtpclient 的类的实例。 (2)用 LogOnToServer()函数登录到指定的 FTP 服务器,允许非匿名用户和匿名两种登录方式,默认 的端口为 21. (3)使用 MoveFile()函数来上传下载数据文件,其中第一个参数是本地地址,第二个参数是远程地 址,文件传输选用二进制模式。注意,文件传输使用同步模式。 (4)可以使用 Ftpcommand()函数来执行 FTP 指令,包括常用的“CWD/home/mydir”来改变远程服务 器上的地址,并处理服务器返回的应答。当这种方式不适用的时候,还可以使用 WriteStr()函数和 ReadStr() 函数向远程服务器发送指令,并自己解释返回的应答。 (5)当所有的文件传输完成之后,使用 LogOffServer 函数来断开与远程服务器的连接。
java sftp 常用方法

一、介绍随着信息化时代的到来,数据传输变得越来越重要。
在企业中,有时候需要通过网络将数据从一个服务器传输到另一个服务器。
而其中一种常用的数据传输协议就是SFTP(Secure File Transfer Protocol)。
SFTP是一种基于SSH协议的安全文件传输协议。
它提供了一种安全的通信渠道以及文件传输功能,能够有效地保护传输的数据安全。
在Java中,我们可以通过一些常用的方法来实现SFTP的文件传输,本文将介绍一些Java中SFTP常用的方法。
二、建立SFTP连接在Java中,我们可以使用JSch库来建立SFTP连接。
需要在项目中导入JSch库的jar包。
我们可以通过以下方法来建立SFTP连接:1. 创建JSch对象我们可以通过new JSch()来创建一个JSch对象,用于后续的SFTP连接。
2. 建立Session使用JSch对象的getSession方法建立一个Session对象,需要传入用户名、主机位置区域和端口号等参数,并通过setPassword或setPrivateKey方法设置认证方式。
3. 打开Channel在建立Session之后,可以通过Session对象的openChannel方法打开一个Channel,类型为" sftp"。
4. 建立SFTP连接使用ChannelSftp的connect方法来建立SFTP连接。
以上即为建立SFTP连接的步骤,通过这些方法,我们可以在Java中轻松地实现SFTP连接的功能。
三、上传文件一旦建立了SFTP连接,我们就可以进行文件的上传操作了。
通过以下方法可以实现文件的上传:1. 使用put方法在ChannelSftp对象中,可以使用put方法来上传文件。
需要传入本地文件路径和远程文件路径两个参数。
2. 设置传输模式在上传文件之前,可以通过ChannelSftp对象的setmode方法来设置传输模式,常用的传输模式包括OVERWRITE、RESUME等。
JAVA中的FtpClient与FTPClient,并实现jsp页面下载ftp服务器上的文件

JAVA中的FtpClient与FTPClient,并实现jsp页面下载ftp服务器上的文件这段时间一直在研究Java如何访问Ftp,搞了一段时间了,也有一定的了解。
故此记录一下。
ftp和FTP我个人觉得FTP更符合我们程序员的口味,不管是方法命名还是API的详细与否,或者是开发平台的问题,FTP毕竟是Apache的东西,做的就是不错。
其实web开发中一般都会涉及到编码问题,所以web上传下载一定会有中文乱码的问题存在,而FTP对中文的支持比ftp要好多了。
使用ftpClient不需要导入其它jar包,只要你使用java语言开发就行了,而使用FTPClient 需要使用commons-net-1.4.1.jar和jakarta-oro-2.0.8.jar,当然jar版本随便你自己。
话不多说,上代码!FTP服务器的文件目录结构图:一、FtpClientFtpClient是属于JDK的包下面的类,但是jdkapi并没有对此作介绍,在中文支持上面也有一定的限制。
本段代码中的Ftp服务器的IP地址,用户名和密码均通过SystemConfig.properties文档获取Ftp_client.java[java]view plain copy1.package com.iodn.util;2.3.import java.io.ByteArrayOutputStream;4.import java.io.File;5.import java.io.FileInputStream;6.import java.io.FileOutputStream;7.import java.io.IOException;8.import java.util.ResourceBundle;9.import .TelnetInputStream;10.import .TelnetOutputStream;11.import .ftp.FtpClient;12.13.public class Ftp_client {14.15.//FTP客户端16.private FtpClient ftpClient;17.private ResourceBundle res=null;18./**19. * 连接FTP服务器20. * @param path 指定远程服务器上的路径21. */22.public Ftp_client(String path){23.24. res = ResourceBundle.getBundle("com.iodn.util.SystemConfig");//获取配置文件propeties文档中的数据25.try{26. ftpClient=new FtpClient(res.getString("Properties.ftpHostIp"));//如果不想使用配置文件即可将数据写死(如:192.168.1.10)27. ftpClient.login(res.getString("Properties.ftpUser"), res.getString("Properties.ftpPassword"));//Ftp服务器用户名和密码28. ftpClient.binary();29. System.out.println("Login Success!");30.if(path.length()!=0){31.//把远程系统上的目录切换到参数path所指定的目录(可不用设置,上传下载删除时加Ftp中的全路径即可)32. ftpClient.cd(path);33. }34. }catch(Exception e){35. e.printStackTrace();36. }37. }38.39./**40. * 上传文件41. * @param remoteFile42. * @param localFile43. */44.public boolean upload(String remoteFile, String localFile){45.boolean bool=false;46. TelnetOutputStream os=null;47. FileInputStream is=null;48.try{49. os=ftpClient.put(remoteFile);50. is=new FileInputStream(new File(localFile));51.byte[] b=new byte[1024];52.int c;53.while((c=is.read(b))!=-1){54. os.write(b, 0, c);55. }56. bool=true;57. }catch(Exception e){58. e.printStackTrace();59. System.out.println("上传文件失败!请检查系统FTP设置,并确认FTP服务启动");60. }finally{61.if(is!=null){62.try {63. is.close();64. } catch (IOException e) {65. e.printStackTrace();66. }67. }68.if(os!=null){69.try {70. os.close();71. } catch (IOException e) {72. e.printStackTrace();74. }75. closeConnect();76. }77.return bool;78. }79./**80. * 下载文件81. * @param remoteFile 远程文件路径(服务器端)82. * @param localFile 本地文件路径(客户端)83. */84.85.public void download(String remoteFile, String localFile) {86. TelnetInputStream is=null;87. FileOutputStream os=null;88.try{89.//获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。
java 不同系统之间传输数据的方法

java 不同系统之间传输数据的方法Java是一种强大且广泛应用的编程语言,用于开发各种类型的应用程序。
在实际开发中,经常需要在不同的系统之间传输数据。
本文将介绍一些常用的方法来实现Java不同系统之间的数据传输。
1. 使用Socket通信Socket通信是一种常用的网络通信方式,可以实现不同系统之间的数据传输。
通过Socket,我们可以在客户端和服务器之间建立一条双向通道进行数据交换。
在Java中,可以使用Java的原生Socket库来实现Socket通信。
客户端和服务器端通过准确的IP地址和端口号来建立连接。
客户端可以使用Socket类来与服务器进行通信,而服务器则使用ServerSocket类监听并接受客户端连接。
2. 使用HTTP协议HTTP协议是一种应用层协议,常用于Web应用程序中。
通过HTTP协议,不同系统之间可以通过发送和接收HTTP请求和响应来进行数据传输。
在Java中,可以使用Java的HttpURLConnection类或者第三方库,如Apache 的HttpClient来实现HTTP通信。
通过发送HTTP请求,可以将数据以请求参数或JSON/XML等格式发送到目标系统,并接收目标系统的HTTP响应。
3. 使用WebServiceWebService是一种通过网络进行通信的软件系统。
它可以使不同系统之间的应用程序通过Web服务接口进行数据传输和交互。
在Java中,可以使用Java的JAX-WS和JAX-RPC等API来开发和使用WebService。
通过定义WebService接口和实现相应的服务端和客户端,可以在不同系统之间轻松地传输数据。
4. 使用消息队列消息队列是一种常用的异步通信方式,允许不同系统之间以消息的形式传递数据。
消息队列将数据发送方发送的消息存储在队列中,接收方从队列中接收并处理消息。
在Java中,可以使用ActiveMQ、RabbitMQ等消息中间件来实现消息队列。
JavaFTP下载文件以及编码问题小结

JavaFTP下载⽂件以及编码问题⼩结问题之前在开发过程中,遇到了⼀点问题,我要访问⼀个FTP服务器去下载⽂件详细情况如下:1. 需要传⼊⼀个可能为中⽂的⽂件名;2. 通过⽂件名去FTP上寻找该⽂件;3. FTP服务器的命名编码为“GBK”;思路1.通过GET⽅法直接将⽂件名负载URL后⾯,但需要通过转码;2.在Java Controller中收到参数后,进⾏解码,解码为正常数据;3.⽤正常数据再转码为GBK,到Service中去调⽤FTP即可4.(因公司安全考虑,我们需要在另⼀个模块中调⽤FTP)通过rest接⼝将⽂件名传出,另⼀模块获取到⽂件流转换为byte[]传回,调⽤response输出即可总结编码问题的解决⽅案:Jquery对URL以及参数转码,据我所了解的主要应⽤encodeURI、encodeURIComponent,例如我需要传⼊变量名为fileDepencevar downloadDepence=fileID+"-"+filename;window.location.href=encodeURI(ajaxurl+"/coadownload/downloadFile?fileDepence="+encodeURIComponent(downloadDepence));这样我在后台就可以接收到转码过后的fileDepence这个串,通过验证encodeURIComponent会以“utf-8”进⾏转码,所以我们使⽤Java对其解码:String viewItem=.URLDecoder.decode(fileDepence, "utf-8");这样得到的viewItem就与我们原本要传⼊的值⼀致了,如果传⼊的为中⽂⽂件名,则此时viewItem便是对应的中⽂⽂件名了。
之后我⼜了解⼀下,通过JS来完成GBK的转码⽐较⿇烦,⽽采⽤Unicode的Java则⽐较⽅法,则同理,我们使⽤viewItem在以GBK来转⼀次码,就可以得到对应的FTP服务器中的⽂件名了。
文件传输协议的简单设计与实现
文件传输协议的简单设计与实现摘要:文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。
本设计是用JAVA语言简单实现文件传输协议,利用SOCKET 以及SERVERSOCKE等类方法,当中实现了上传、下载、获取服务器目录等基本文件传输功能。
关键字:文件传输、FTP。
1 具体设计任务1(1实验内容我们的计算机网络实验环境建立在TCP/IP 网络体系结构之上。
各计算机除了安装TCP/IP 软件外,还安装了TCP/IP 开发系统。
实验室各计算机具备Windows环境中套接字socket 的编程接口功能,可为用户提供全网范围的进程通信功能。
本实验要求学生利用这些功能,设计和实现一个简单的文件传送协议。
1(2具体要求用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该程序应能实现下述命令功能:get:取远方的一个文件put:传给远方一个文件pwd:显示远主当前目录dir:列出远方当前目录cd :改变远方当前目录, :显示你提供的命令quit :退出返回此命令的具体工作方式(指给出结果的形式)可以参照FTP 的相应命令,有余力的同学可以多实现几个命令。
2 基本思路及所涉及的相关理论2.1 文件传输协议网络协议是网络中计算机与终端之间正确传送信息和数据的规范格式,起包括语法、语义和时序这三部分。
文件传输协议(File Transfer Protocol, FTP)是在TCP/IP网络中传输文件的一种格式规范,其规定在用户和服务器之间开设两个通信端口:控制端口和数据端口。
前者生存周期为从用户登录开始直至用户登出,后者则在进行数据传送的时候打开,并且在数据传送完毕之后立即结束。
控制端口用来监听双方共同规定的控制字以达到及时提供服务或响应,数据端口则要先将文件拆分成分组再进行传送,这样做的目的是为了更加好的适应网络中的带宽限制,以及减少传送期间节点的延时,以达到高速传送。
如何通过FTP下载文件
如何通过FTP下载文件一、什么是FTPFTP(File Transfer Protocol)即文件传输协议,是用于在计算机之间传输文件的标准协议。
通过FTP,我们可以方便地将文件从一个计算机上传到另一个计算机,或从服务器下载到本地计算机上。
二、准备工作在开始使用FTP下载文件之前,需要进行以下准备工作:1. 安装FTP客户端软件:常见的FTP软件包括FileZilla、CuteFTP、FlashFXP等。
可以根据个人需要选择合适的FTP客户端软件并安装在计算机上。
2. 获取FTP服务器信息:需要知道要从哪个FTP服务器下载文件,包括FTP服务器的地址(通常是一个IP地址或域名)、端口号、用户名和密码。
这些信息通常由FTP服务器的管理员提供。
三、使用FTP客户端下载文件的步骤1. 启动FTP客户端软件并打开连接窗口。
2. 在连接窗口中填写FTP服务器的地址、端口号、用户名和密码等信息,然后点击连接按钮。
3. 连接成功后,FTP客户端软件会显示远程服务器上的文件列表。
浏览文件列表,找到要下载的文件所在的目录。
4. 双击或右键单击要下载的文件,选择下载或保存选项。
5. 指定文件保存的路径和名称,然后点击确定按钮。
6. FTP客户端软件会开始下载文件,并显示下载进度。
下载完成后,可以在指定的路径中找到下载好的文件。
四、注意事项在通过FTP下载文件时,需要注意以下事项,以确保下载过程的顺利进行:1. 确保FTP服务器的地址、端口号、用户名和密码等信息输入正确,否则无法成功连接到FTP服务器。
2. 在下载大文件时,建议使用稳定的网络环境,并确保本地磁盘空间足够。
3. 如果下载过程中出现连接中断或下载失败等情况,可以尝试重新连接或使用其他FTP客户端软件进行下载。
4. 部分FTP服务器需要进行被动模式(PASV)设置,以允许客户端与服务器之间建立数据连接。
如果下载过程中遇到连接问题,可以尝试切换到被动模式。
五、总结通过FTP下载文件是一种常见且便利的方式,适用于从服务器下载文件到本地计算机的场景。
ftp下载
FTP下载什么是FTP下载FTP(File Transfer Protocol)是一种用于在计算机网络上传输文件的协议。
它使用客户端-服务器模式,允许用户通过一个FTP客户端连接到远程服务器,并在客户端和服务器之间传输文件。
FTP下载的步骤FTP下载通常包括以下步骤:1.创建一个FTP连接:使用FTP客户端软件(例如FileZilla、WinSCP等)创建一个与FTP服务器的连接。
通常需要提供服务器的IP地址、用户名和密码。
2.导航到目标文件夹:一旦连接成功,客户端会显示服务器上的文件和文件夹列表。
导航到您想要下载文件的目标文件夹。
3.选择文件下载:在目标文件夹中,选择您想要下载的文件。
您可以使用文件夹列表和文件列表来浏览服务器上的文件。
4.下载文件:选择文件后,右键单击文件,并选择“下载”或类似选项。
这将启动文件的下载过程,并将文件从服务器传输到您的计算机。
5.等待下载完成:在下载过程中,您可能需要等待一段时间,具体取决于文件大小和网络速度。
一旦下载完成,您将在本地计算机上看到该文件。
6.完成下载:一旦文件下载完成,您可以继续选择其他文件进行下载,或者断开与服务器的连接,完成整个FTP下载过程。
FTP下载的优点使用FTP下载文件具有许多优点,包括:1.高速传输:与通过电子邮件或其他方式发送文件相比,FTP下载能够更快地传输文件,特别是对于较大的文件。
2.简单易用:FTP客户端软件通常具有用户友好的界面,使得连接和下载文件变得非常简单。
3.大容量支持:FTP可以处理大文件的传输,而不会受限于电子邮件或云存储服务的限制。
4.可靠性:FTP下载过程中,文件传输通常具有容错和恢复机制,确保文件从服务器成功传输到本地计算机。
FTP下载的安全性考虑尽管FTP下载非常方便,但在使用FTP时需要考虑安全性问题。
以下是一些有关FTP安全性的注意事项:1.加密连接:为了防止文件传输过程中的敏感信息被窃取,使用SSL / TLS等加密连接来确保安全的数据传输。
java实现连接sftp服务器并下载文件到本地
java实现连接sftp服务器并下载⽂件到本地1.pom.xml引⼊jar包<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency>2.连接sftp服务器⽅法private static Session sshSession;/*** 连接sftp服务器* @param host ftp地址* @param port 端⼝* @param userName 账号* @param password 密码* @return*/public static ChannelSftp sftpConnection(String host,int port, String userName, String password){JSch jsch = new JSch();ChannelSftp channelSftp;try {jsch.getSession(userName, host, port);sshSession = jsch.getSession(userName, host, port);sshSession.setPassword(password);Properties properties = new Properties();properties.put("StrictHostKeyChecking", "no");sshSession.setConfig(properties);sshSession.connect();Channel channel = sshSession.openChannel("sftp");channel.connect();channelSftp = (ChannelSftp) channel;}catch (JSchException e){e.printStackTrace();throw new RRException("Sftp服务器登录异常!");}return channelSftp;}3.断开sftp服务⽅法/***@description 退出Sftp服务器登录*@return**/public static void sftpClose(ChannelSftp channelSftp){if (channelSftp != null) {if (channelSftp.isConnected()){channelSftp.disconnect();}}}/*** 关闭session*/public static void sessionClose(){if (sshSession != null) {if (sshSession.isConnected()){sshSession.disconnect();sshSession = null;}}}4.下载sftp服务器知道路径的⽂件到本地⽅法/*** 下载sftp⽂件* @param sftp* @param newFileName 新⽂件名称* @param path ⽂件路径* @param fileName ⽂件名称* @param downUrl 下载到本地的路径* @throws Exception*/public static void downSftpFile(ChannelSftp sftp, String newFileName,String path, String fileName, String downUrl) throws Exception {OutputStream os=null;try {File localFile = new File(downUrl + "/" + newFileName);if (!localFile.getParentFile().exists()) {localFile.getParentFile().mkdirs();localFile.createNewFile();}if (path != null && !"".equals(path)) {sftp.cd(path);//进⼊所在路径}os = new FileOutputStream(localFile);sftp.get(path + fileName, os);os.close();}catch (Exception e){e.printStackTrace();}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用JAVA 实现Socket通讯及Ftp下载
需求分析
在大亚湾实时数据接收过程中,Unix工作站中通过API调用从进程中实时获取各个测点的实时数据,并将数据以文件的形式保存到Ftp目录中。
Unix通知Windows(Windows 2000)平台从ftp上下载数据文件。
我们要完成的工作是,通过协议完成Unix与Windows平台的通讯,然后,控制Windows平台从ftp上下载指定文件。
解决方案
考虑到文件是在异构系统(UNIX与WINDOWS)之间传输,为了有更好的移植性,我们决定用JAVA进行开发。
要解决通讯,首先设置好协议。
根据需求,协议是这样定义的:
消息格式:
其中,消息头固定为“kdc”。
消息号为通知对方的行动信号。
AskForDownload="1";
WaitForDownload="2";
AllowDownload="81";
DownloadFile="82";
以上为常数。
数据块为用于进行FTP操作的参数(若为空则以“#”表示)。
通讯方式:
服务器通知客户端下载。
客户端向服务器提出下载申请,消息中包含有用户名。
服务器收到从客户端发来的消息后,对客户进行身份验证,若通过则向客户端发出允许下载的消息,将下载文件的路径传给客户端;客户端收到允许下载消息后,便准备下载,将准备下载的消息传给服务器;服务器收到消息后,将口令传给用户;用户收到后,开始下载。
具体实现
用JAVA实现SOCKET通讯及FTP下载,需要引用以下包:
java.io.*; .*; .*;.ftp.*;
Socket操作的步骤:
(1)打开一个Socket。
(2)打开输入输出流。
(3)通过服务协议读写流。
(4)关闭流。
(5)关闭Socket。
Ftp操作步骤:
(1)连接Ftp服务器。
(2)打开流,创建一个文件实例。
(3)将Ftp上的文件写入流,然后在从流写到客户端的文件实例中。
(4)关闭流。
(5)关闭Ftp服务。
对消息的解析
消息中包含有三部分内容:头部,消息号,数据块。
在发送时,消息是以字符串的形式传送的。
所以首先,必须把三部分内容从消息中分离出来。
我们的解决办法是引用java.util.*中的StringTokenizer类。
先用消息字符串创建StringTokenizer的实例,然后用StringTokenizer类中的nexttoken()方法对其进行分离,在将三部分内容分别赋给三个已定义好的变量。
将消息中的三部分分离出来后,将其传给协议类的action(String head,String type,String infor)方法,根据不同的消息进行相应的行动。
意外处理
在进行通讯和进行FTP操作时,会出现一些意外,比如,创建端口错误,连接失败,消息格式不正确,连接FTP服务器是登录错误等。
由于,双方的通讯均为自动进行,出现意外若将此操作重复,没有任何意义,只会导致死循环,所以,我们的做法是,停止通讯,发送报错消息,通知对方管理员,检查其通讯配置及消息格式是否正确,并做适当的修改,然后再重新进行通讯。
安全问题
这是我们在程序中没有解决的地方,具体表现在,服务器要将登录FTP的口令传送给客户端,由于没有加密措施,在传送过程中,可能会被窃取,这将导致可能会有其他机器访问FTP服务器。
所以,这个问题,必须要解决。