java socket ftp登录_基于java socket的简单FTP功能实现
實現FTP的一些功能,如上傳文件,下載文件,顯示目錄,改變目錄,退出等功能
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.*;
import java.util.ArrayList;
import java.io.File;
public class server {
ServerSocket ss = null;
String dir = "";//顯示目錄
String cmd = "";
DataOutputStream dos;
String direcFile = "";
File rootDirectory;
String shareFile;
DataInputStream dis ;
//ArrayList fileArrayList = new ArrayList ();
ArrayList fileArrayList = new ArrayList();
private String shareFiledirectory;
public static void main(String[] args) {
//System.out.println("等待連接");
new server("D:\\Backup\\我的文檔\\網絡課程設計共享文件");
}
public server(String shareFiledirectory){
this.shareFiledirectory = shareFiledirectory;
//建立套接字
try {
ss = new ServerSocket(8888);//建立提供服務器的端口號為8888
} catch (IOException e1) {
e1.printStackTrace();
}
try{
while(true){
boolean flag = true;
while(flag){
Socket s = ss.accept();//阻塞式,等待客戶端請求連接
System.out.println("已有客戶端連接");
//接受對方的要求:
dis = new DataInputStream(new BufferedInputStream(s
.getInputStream()));//BufferedInputStream 利用緩沖區來提高讀效率,
// 從此套接字讀取字節的輸入流
//BufferedInputStream(InputStream in) 參數in指定需要被裝飾的輸入流
cmd= dis.readUTF();//從dis輸入流讀取若干字節,把它轉換為采用UTF-8字符編碼的字符串,并將其放在cmd String變量里
//UTF-8對ASCII字符采用一個字節形式的編碼,對非ASCII字符則采用兩個或兩個以上字節形式的編碼
dis.close();//關閉輸入流
s.close();//關閉socket
System.out.println("輸出讀入的字符串:" cmd);
// System.out.println(cmd=="get");
//接受后放在cmd里用于判斷:
if(cmd.equals("get"))
get();
else if(cmd.equals("put"))
put();
else if(cmd.equals("cd"))
cd ();
else if(cmd.equals("dir"))
dir();
else if(cmd == "quit")
flag = false;
}
}
}catch (IOException e){
}
}
public void get(){
System.out.println("get" 1111);
Socket s = null;//連接為空
try{
s = ss.accept();
//接受對方的要求的文件名:
dis = new DataInputStream(new BufferedInputStream(s
.getInputStream()));//
String filePath = dis.readUTF();//
System.out.println(filePath);
//傳輸文件:
dos = new DataOutputStream(new BufferedOutputStream(s.getOutputStream()));
File file = new File(filePath);
dos.writeUTF(file.getName());
dos.flush();
dos.writeLong(file.length());
dos.flush();
dis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
int BUFSIZE = 8192;
byte [] buf = new byte[BUFSIZE];
while(true){
int read = 0;
if(dis != null){
read = dis.read(buf);
}else{
System.out.println("no file founded!");
break;
}
if (read == -1){
break;
}
dos.write(buf, 0, read);
}
dos.flush();
}catch(IOException e){
System.out.println("asdfsssssssssss");
}finally{
try{
dos.close();
dis.close();
s.close();
}catch(IOException e){
}
}
}
public void put(){
System.out.println("put");
Socket s = null;
try{
s = ss.accept();
//下載文件
dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));//從客戶端接收存放上傳文件路徑的輸出流
int bufferSize = 8192;
// 緩沖區
byte[] buf = new byte[bufferSize];
int passedlen = 0;
long len = 0;
String savePath = "E:/上傳";
// 獲取文件名稱 保存上傳 文件的路徑名
savePath = savePath File.separator dis.readUTF();
//在本地路徑建一個數據流
DataOutputStream fileOut = new DataOutputStream(
new BufferedOutputStream( new FileOutputStream(savePath)));
// 獲取文件長度
len = dis.readLong(); //從輸入流 中讀取8個字節
System.out.println("文件的長度為:" len " KB");
System.out.println("開始接收文件!");
// 獲取文件
while (true) {
int read = 0;
if (dis != null) {
read = dis.read(buf); //從輸入流將數據讀到緩沖區中,并將返回結果賦給read
}
passedlen = read;
if (read == -1) {
break;
}
System.out.println("文件接收了" (passedlen * 100 / len) "%");
fileOut.write(buf, 0, read);
}
System.out.println("接收完成,文件存為" savePath);
fileOut.close();
dis.close();
s.close();
}catch(IOException e ){
}
}
public void cd(){
System.out.println("cd");
Socket s = null;
try{
s = ss.accept();
//讀取要到達的改變的目錄:
dis = new DataInputStream(new BufferedInputStream(s
.getInputStream()));
shareFile = dis.readUTF();
System.out.println(shareFiledirectory);
dir();
}catch(IOException e){
}finally{
}
}
public void dir ( ) throws IOException{
rootDirectory = new File(shareFiledirectory);//shareFiledirectory表示共享文件的路徑
fileArrayList.clear();
//String[] myList;//定義一個字符串數組
//myList = rootDirectory.listFiles();
//for(int i = 0;i
//System.out.println(myList[i]);
//}
//catch(Exception e){
//e.printStackTrace();
//}
//}
/* File f=new File(shareFiledirectory);
File[] list=f.listFiles();
for(int i=0;i
System.out.println(list[i].getAbsolutePath());//打印全路徑*/
initFileArrayList();
for(int i =0;i
System.out.println(fileArrayList.get(i).getAbsolutePath());
direcFile = direcFile fileArrayList.get(i).getAbsolutePath() '\n';
}
try{
Socket s = ss.accept();
dos = new DataOutputStream(
new BufferedOutputStream(s.getOutputStream()));
byte []buf = direcFile.getBytes();
dos.write(buf);
dos.flush();
dos.close();
s.close();
}catch(IOException e){
}
}
public void initFileArrayList() { // 將目錄下所有文件放在一個數組列表里面fileArrayList
if (rootDirectory.isDirectory()) {
// 遍歷目錄下面的文件和子目錄
File[] fileList = rootDirectory.listFiles();
System.out.println(fileList.length);
for (int i = 0; i < fileList.length; i ) {
// 如果是文件,添加到文件列表中
if (fileList[i].isFile()) {
fileArrayList.add(new File(fileList[i].getAbsolutePath()));
System.out.println(fileList[i].getAbsolutePath());
System.out.println("添加了" fileList[i].getName());
}
// 否則遞歸遍歷子目錄
else if (fileList[i].isDirectory()) {
System.out.println("文件");
fileList[i].mkdir();//
rootDirectory = fileList[i];
initFileArrayList();
}
}
}
}
}
資源下載此資源下載價格為1D幣,請先登錄
總結
以上是生活随笔為你收集整理的java socket ftp登录_基于java socket的简单FTP功能实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么把html表复制到word里,怎么把
- 下一篇: c51编程语言基础习题,《单片机基础》练