📄 ftpserver.java
字号:
import java.io.*;
import java.net.*;
import java.util.concurrent.*;
public class FTPServer {
private int port=8000;
private ServerSocket serverSocket;
private ExecutorService executorService; //线程池
private final int POOL_SIZE=4; //单个CPU时线程池中工作线程的数目
public FTPServer() throws IOException {
serverSocket = new ServerSocket(port);
//创建线程池
//Runtime的availableProcessors()方法返回当前系统的CPU的数目
//系统的CPU越多,线程池中工作线程的数目也越多
executorService= Executors.newFixedThreadPool(
Runtime.getRuntime().availableProcessors() * POOL_SIZE);
System.out.println("服务器启动");
}
public void service() {
while (true) {
Socket socket=null;
try {
socket = serverSocket.accept();
executorService.execute(new Handler(socket));
}catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String args[])throws IOException {
new FTPServer().service();
}
}
class Handler implements Runnable{
private Socket socket;
public Handler(Socket socket){
this.socket=socket;
}
public void run(){
try {
System.out.println("New File Receive accepted " + socket.getInetAddress() + ":" +socket.getPort());
OutputStream fileOut = new FileOutputStream("E:\\javaTech\\ch03\\data2.txt");
InputStream socketIn = socket.getInputStream();
byte[] buff = new byte[1024];
int len=socketIn.read(buff); //从网络输入流中读len个字节到buff中.
while (len!=-1) {
fileOut.write(buff,0,len); //从buff中写入len个字节到文件.
len=socketIn.read(buff);
}
fileOut.close();
System.out.println("File receives over");
}catch (IOException e) {
e.printStackTrace();
}finally {
try{
if(socket!=null)socket.close();
}catch (IOException e) {e.printStackTrace();}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -