最近学习java编程是一个实验让我困惑了很久就是:
编写实现类似FTP功能的程序,客户程序向服务器发送字符串”ls”,服务器返回几个文件名,客户程序从中选择一个文件,服务器将该文件发送给客户端,客户程序接受该文件并保存在本地硬盘中。(说明:不要求采用FTP协议实现)
下面把代码贴出来,可以实现文件传送,
传送文件中,服务器端吧文件对象内容写到byte数组中然后由socket发送
接收端主要也是读getinputstream然后保存到byte数组中,在写入到文件中
客户端程序:
package conan;
import java.io.*;
import java.net.*;
class FTPClient extends Thread{
Socket sl;
DataOutputStream dos;
DataInputStream dis;
public static void main (String[] args) {
FTPClient ftpc=new FTPClient();
ftpc.start();
}
public String GetCom()throws Exception{
System.out.println("请输入命令: " );
InputStreamReader is=new InputStreamReader(System.in);
char [] buf=new char [100];
int len = is.read(buf);
String str=new String(buf,0,len).trim();
return str;
}
public String GetFileName()throws Exception{//获得输入的文件名
System.out.println("输入文件名: " );
InputStreamReader is=new InputStreamReader(System.in);
char [] buf=new char [100];
int len2=is.read(buf);
String str=new String(buf,0,len2).trim();
return str;
}
public void receiveFile(Socket s) throws Exception //接收文件
{
sl= s;
String filename=GetFileName();
dos=new DataOutputStream(sl.getOutputStream());
dos.writeUTF(filename);
System.out.println("发送文件名成功" );
File f=new File(File.separator);//当前根目录
File file =new File(f,"Downloads" +File.separator+filename); //保存到当前目录得Downloads文件里面
sl=new Socket("127.0.0.1" ,5432); //创建一个socket对象用来传送文件
BufferedOutputStream buff=new BufferedOutputStream(new FileOutputStream(file));
dis=new DataInputStream(sl.getInputStream());
byte [] line=new byte [102400];
int mount;
System.out.println("开始接收文件" );
System.out.println("文件传送中...." );
while ((mount=dis.read(line))!=-1){
buff.write(line,0,mount);
buff.flush();//刷新
Thread.sleep(50);//设置一个等待时间,有利于接收文件
}
sl.close();
buff.close();
System.out.println("finished" );
}
public void run(){
try {
Socket sc;
sc=new Socket("localhost" ,4321);
dos=new DataOutputStream(sc.getOutputStream());
dos.writeUTF(GetCom());
dis=new DataInputStream(sc.getInputStream());
for (int i=0;i<30;i++){
System.out.println(dis.readUTF());
}
receiveFile(sc);
}
catch (Exception e){
e.printStackTrace();
}
}
}
服务器端程序:
package conan;
import java.net.*;
import java.io.*;
class FTPServer extends Thread
{
ServerSocket server,server1;
Socket s;
DataInputStream dis;
DataOutputStream dos;
public static void main (String[] args) {
FTPServer ftps=new FTPServer();
ftps.start();
}
public void sendFile(String filename)throws Exception
{
try {
server1=new ServerSocket(5432);
s=server1.accept();
File path=new File(File.separator);//当前根目录
File file=new File(path,filename);//创建该文件对象
System.out.println("将文件独到缓冲流中" );
BufferedInputStream buffile=new BufferedInputStream(new FileInputStream(file));
byte [] buf=new byte [102400];//每次发送的块打大小
int mount;
dos=new DataOutputStream(s.getOutputStream());
System.out.println("开始传送文件" );
while ((mount=buffile.read(buf))!=-1){//传送文件,将文件内容以字节形式保存到buf中再发送
dos.write(buf,0,mount);
Thread.sleep(50);
}
System.out.println("文件传送完毕" );
server1.close();
s.close();//关闭清理工作
buffile.close();
}
catch (Exception e){
e.printStackTrace();
}
}
public void run(){
try {
server=new ServerSocket(4321);//4321端口用来接接收命令
System.out.println("Listen at 4321 port" );
while (true )
{
s=server.accept();//监听
dis=new DataInputStream(s.getInputStream());
byte [] buf=new byte [100];
int len=dis.read(buf);
String str=new String(buf,0,len).trim();
System.out.println("接收命令成功" );
if (str.startsWith("ls" )){
File localfile=new File(File.separator);
String[] filelist=localfile.list();
dos=new DataOutputStream(s.getOutputStream());//输出文件列表
dos.writeUTF("-------------------File List--------------------" );
for (int i=0;i<30;i++){
dos.writeUTF(filelist[i]);
}
}
dis=new DataInputStream(s.getInputStream());
String filename_from_client=dis.readUTF().trim();
System.out.println("接收文件名成功" );
System.out.println("传送得文件名 :" +filename_from_client);
sendFile(filename_from_client);
}
}
catch (Exception ex){
ex.printStackTrace();
}
}
}
分享到:
相关推荐
Java课程设计中的FTP下载模拟是一项常见的实践任务,旨在帮助学习者深入理解网络协议、Java编程以及文件处理等核心概念。FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议,而通过Java实现...
客户端需要模拟FTP命令的发送,如登录服务器、改变目录、列举目录内容、上传和下载文件。Java.io包提供了丰富的输入/输出流类,如`FileInputStream`和`FileOutputStream`,用于本地文件的读写,而`...
2. **Java FTP客户端库**:Java标准库中并没有直接提供FTP客户端,但可以通过`java.net.Socket`类模拟实现。不过,更常见的是使用Apache Commons Net库,它提供了`FTPClient`类,简化了FTP客户端的开发。 3. **...
在Java编程中,模拟FTP(File Transfer Protocol)程序是一项常见的任务,这涉及到通过网络进行文件传输的实现。本文档提供了一个简单的Java FTP客户端程序的代码示例,它使用了Swing库来构建用户界面,并利用Java的...
在Java中,实现FTP客户端通常会用到`java.net.Socket`类来建立网络连接,`java.io`包中的输入/输出流处理数据传输,以及`org.apache.commons.net.ftp`库,这个库提供了FTPClient类,简化了FTP协议的许多复杂操作,如...
1. **Java FTP库**:Java标准库中的`java.net.Socket`和`java.io`可以用于基本的TCP连接和文件I/O,但更高级的FTP操作通常会使用`org.apache.commons.net.ftp`库,这个库简化了FTP协议的处理,包括登录、目录浏览、...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...
在本项目中,"Java简单模拟QQ"是一个尝试用Java编程语言实现的简易版即时通讯软件,它包含了QQ的基本功能,如用户注册、登录、聊天、远程协助以及文件传输。以下将详细介绍这些功能的实现原理及其相关的Java技术知识...
使用Java实现HTTP 1.0的FTP模拟,通常会用到`java.net.Socket`和`java.net.ServerSocket`类来处理客户端和服务器之间的连接,以及`java.io`包中的类来读写文件。 4. **多线程**: 在Java中,多线程可以通过继承`...
Java二进制IO类与文件复制操作实例.rar Java从压缩包中提取文件.rar Java从网络取得文件.rar Java仓库管理系统,Access数据库.rar Java仿Vista界面风格的登录窗口.rar Java仿千千静听音乐播放器源代码.rar Java企业...
Java的`java.net`包提供了Socket和ServerSocket类用于网络通信,`java.io`包提供了流处理类,而`java.util`中的ArrayList或HashMap等数据结构可以帮助管理FTP会话中的状态和数据。 总的来说,构建一个简单的Java ...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
1. **FTP连接**:使用`java.net.Socket`类建立与FTP服务器的TCP连接。之后,可以使用`org.apache.commons.net.ftp.FTP`或`org.apache.commons.net.ftp.FTPClient`库来管理FTP会话。 2. **登录验证**:通过调用`...
首先,**Java文件上传下载**涉及到I/O流处理,Java标准库提供了`java.io`和`java.nio`包来支持文件读写操作。文件上传是将本地文件传输到服务器的过程,这通常通过HTTP、FTP或其他协议完成。在Java中,可以使用`java...
在Java中实现FTP,主要依赖于Java的`java.net`和`java.io`包,它们提供了网络连接和输入/输出流的基础支持。例如,`java.net.Socket`用于建立TCP连接,`java.io.InputStream`和`java.io.OutputStream`则用于读写数据...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...
在Java中实现FTP服务器,我们需要使用Java的Socket编程来处理网络连接,以及IO流来处理数据传输。以下是一些关键的步骤: 1. **创建监听Socket**:服务器启动时,需要创建一个Socket监听特定端口(如21,这是FTP的...