package experiment1;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.Scanner;
public class FTPClientTest {
public static void main(String[] args) {
System.out.println("========客户端========");
System.out.println("FTP Client启动");
FTPClient fc = new FTPClient();
fc.tidyCommand();
}
}
class FTPClient{
private String DownlDir;
private String PutDir;
private Socket socket;
public FTPClient() {
}
//主函数,用于调用连接方法、接受控制台输入命令并选择接下来要执 行的方法
public void tidyCommand(){
connect();
String command = null;
DataOutputStream dos = null;
DataInputStream dis = null;
BufferedReader br = null;
try {
br = new BufferedReader(
new InputStreamReader(System.in));
dos = new DataOutputStream(
new BufferedOutputStream(this.socket.getOutputStream()));
dis = new DataInputStream(
new BufferedInputStream(this.socket.getInputStream()));
while(true){
System.out.print("ftp:\\>");
command = br.readLine();
if(command.startsWith("put ")){
sendfiles(command.substring(4),dos);
}else if(command.startsWith("get ")){
receivefiles(command.substring(4),dis,dos);
}else if(command.equals("exit")){
disconnect(dos, dis);
break;
}else{
System.out.println("无效指令,请重试!!!");
}
}
dis.close();
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void connect(){
System.out.println("FTP Client连接中...");
try {
this.socket = new Socket("localhost",8888);
} catch (IOException e) {
System.out.println("FTP Client连接失败!!!");
e.printStackTrace();
}
System.out.println("FTP Client连接成功!!!");
setPutDir();
setDownlDir();
}
public void disconnect(DataOutputStream dos,DataInputStream dis){
if(this.socket != null){
try {
dos.writeUTF("disconnect");
dos.flush();
this.socket.close();
} catch (IOException e) {
System.out.println("网络连接异常,程序退出!!!");
e.printStackTrace();
}
}
System.out.println("程序退出!!!");
}
//请设置上传路径
public void setPutDir(){
System.out.println("请设置上传路径!!!(例如:D:\\lll)");
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
String PutDir = sc.next();
File file = new File(PutDir);
if(file.isDirectory()){
System.out.println("设置成功!!!");
}else {
System.out.println("设置失败!!!请重新输入");
setPutDir();
}
this.PutDir = PutDir;
}
//请设置下载路径
@SuppressWarnings("resource")
public void setDownlDir(){
System.out.println("请设置下载路径!!!(例如:D:\\lll)");
Scanner scanner = new Scanner(System.in);
String DownlDir = scanner.next();
File file = new File(DownlDir);
if(file.isDirectory()){
System.out.println("设置成功!!!");
}else {
System.out.println("设置失败!!!请重新输入");
setDownlDir();
}
this.DownlDir = DownlDir;
}
//接收文件方法,用于接收服务器端发来的文件
public void receivefiles(String filename,DataInputStream dis,DataOutputStream dos){
BufferedOutputStream bout = null;
File file = null;
try {
file = new File(this.DownlDir,filename);
dos.writeUTF("get " + filename);
dos.flush();
boolean exist = dis.readBoolean();
if(exist){
System.out.println("开始下载"+file.getName()+"文件....");
long size = dis.readLong();
bout = new BufferedOutputStream(new FileOutputStream(file));
for(int i=0;i<size;i++) {
bout.write(dis.read());
bout.flush();
}
bout.close();
}else {
System.out.println("文件不存在!!!下载文件失败");
return;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("文件"+file.getName()+"下载成功!!!");
}
//发送文件方法,用于上传文件给服务器端
public void sendfiles(String filename,DataOutputStream dos){
File file = null;
BufferedInputStream bis = null;
try {
file = new File(this.PutDir,filename);
if(file.exists()){
System.out.println("开始上传"+file.getName()+"文件....");
long size = file.length();
dos.writeUTF("put " + file.getName());
dos.flush();
dos.writeLong(size);
dos.flush();
bis = new BufferedInputStream(new FileInputStream(file));
for(int i=0;i<size;i++) {
dos.write(bis.read());
dos.flush();
}
bis.close();
}else{
System.out.println("上传文件失败!!!文件不存在");
return;
}
} catch (IOException e) {
System.out.println("文件"+file.getName()+"上传失败!!!");
e.printStackTrace();
return;
}
System.out.println("文件"+file.getName()+"上传成功!!!");
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Java高级程序设计实验代码-多线程版-FTP服务器设计与实现.zip
共2个文件
java:2个
1 下载量 113 浏览量
2023-09-27
11:07:38
上传
评论
收藏 3KB ZIP 举报
温馨提示
"Java高级程序设计实验代码-多线程版-FTP服务器设计与实现.zip" 是一份令人振奋的资源,它代表了Java高级程序设计的精髓和多线程技术的深度理解。这个ZIP文件包含了一个完整的FTP服务器的源代码,而且不同于传统的FTP服务器,它是一个多线程版的FTP服务器,具有更高的性能和更好的并发处理能力。以下是这份资源的主要特点和内容亮点: 全面的FTP服务器实现: ZIP文件中包含了一个完整的FTP服务器的源代码,涵盖了FTP协议的基础实现、多线程编程技巧、服务器性能优化、数据传输安全等各个方面。这意味着读者可以深入研究代码,了解每个功能的实现方式,学会如何构建一个高性能的FTP服务器。 多线程设计: 该FTP服务器采用多线程设计,以实现更好的性能和并发处理。通过研究这份源代码,读者将学会如何使用Java多线程机制来构建一个高效的FTP服务器,从而满足大规模数据传输的需求。这对于开发者来说是一个非常重要的技能,尤其是在处理大量用户并发访问时。 实际操作: 源代码中不仅有注释和文档,还包括了一个完整的多线程FTP服务器项目,读者可以通过实际操作来学习并深入理解FTP服务器的构建过
资源推荐
资源详情
资源评论
收起资源包目录
Java高级程序设计实验代码-多线程版-FTP服务器设计与实现.zip (2个子文件)
FTPServerTest.java 4KB
FTPClientTest.java 5KB
共 2 条
- 1
资源评论
程序员Ale-阿乐
- 粉丝: 1w+
- 资源: 99
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于MCU MC20P7012B 开发锂电池平衡充电管理+C语言项目源码+文档说明
- OpenAI接口管理+分发系统-AI中转计费平台系统源码.zip
- 【uniapp毕业设计】宠物商城源码(完整前后端+mysql+说明文档).zip
- 容量退化前电池循环寿命的数据驱动预测(电池寿命预测精度排名第二方案)
- GetQzoneHistory_1.0.2_Single.zip
- 2024年黑龙江省普通高校专升本考生总成绩一分段统计表【39护理学】.xls
- mysql-installer-8.39
- 基于C#实现为电动车租赁开发的会员管理系统+项目源码+文档说明
- Docker bitnami/zookeeper:3.8.4镜像包
- 学习threejs,导入PLY格式的模型
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功