📄 ftpserver.java
字号:
/*
*ReceiveThread线程负责接受请求并判断请求类型;
*SendThread线程负责发送数据给客户端,发送线程和接受线程通过管道通信;
*/
import java.net.*;
import java.io.*;
public class FtpServer
{
static ServerSocket ss;
public static void main(String[] args){
try{
PipedOutputStream pos=new PipedOutputStream();
PipedInputStream pis=new PipedInputStream(pos);
DataInputStream dissc;
DataOutputStream dossc;
ss=new ServerSocket(4000);
Socket sc=null;
while (true){
sc=ss.accept();
dissc=new DataInputStream(sc.getInputStream());
dossc=new DataOutputStream(sc.getOutputStream());
ReceiveThread rt=new ReceiveThread(dissc,pos);
SendThread st=new SendThread(dossc,pis);
rt.start();
Thread.sleep(1);
st.start();
Thread.sleep(1);
System.out.println("Server is started!");
}
}catch(IOException e){
System.out.println(e);
}catch(InterruptedException e){
System.out.println(e);
}
}
}
class ReceiveThread extends Thread
{
DataOutputStream dos;
DataInputStream dissc;
String message=null;
String dir=null;
public ReceiveThread(DataInputStream dissc,PipedOutputStream pos){
this.dissc=dissc;
dos=new DataOutputStream(pos);
}
public ReceiveThread(){
}
public void run(){
String order=null;
try{
while(true){
order=new String(dissc.readUTF());
if(order.substring(0,4).equals("dire")){
showDir(order.substring(4));
dos.writeUTF(message);
}
if(order.substring(0,4).equals("down")){
readFile(dir+"\\"+order.substring(4));
}
}
}catch(IOException e){
System.out.println("HHHH");
}
}
public void showDir(String d){
File f=null;
String[] list=null;
if(dir==null){
dir=d;
}
else
dir+="\\"+d;
f=new File(dir);
list=f.list();
message="[dire]";
for(int i=0;i<list.length;i++){
File file=new File(list[i]);
if(!file.isHidden()){
message+=" "+list[i]+"\n";
}
}
}
public void readFile(String fileName){
boolean copy=true;
String filePath=fileName;
String file=null;
File f=new File(filePath);
BufferedReader br=null;
try{
br=new BufferedReader(new FileReader(f));
}catch(FileNotFoundException e){
}
while(copy){
try{
file=br.readLine();
if(file==null){
copy=false;
}
else{
System.out.println("[file]"+file);
dos.writeUTF("[file]"+file);
//dos.flush();
}
}catch(IOException e){
}
}
}
}
class SendThread extends Thread
{
PipedInputStream pis;
DataOutputStream dossc;
String message;
public SendThread(DataOutputStream dossc,PipedInputStream pis){
this.pis=pis;
this.dossc=dossc;
}
public SendThread(){
}
public void run(){
try{
DataInputStream dispis=new DataInputStream(pis);
while(true){
message=dispis.readUTF();
System.out.println("Send:"+message);
dossc.writeUTF(message);
}
}catch(IOException e){
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -