FTP服务器看视频肯能由于某个文件卡住了,或是FTP占用了服务器好久的资源,有时也会特慢,解决这种情况的办法就是将FTP关掉,重新打开一个,继续上传,但要记得是采用续传,不能采用覆盖。
服务器端可以采用多线程处理客户请求,例如:package threadPool
import java.io.BufferedReader
import java.io.IOException
import java.io.InputStream
import java.io.InputStreamReader
import java.io.OutputStream
import java.io.PrintWriter
import java.net.ServerSocket
import java.net.Socket
import java.util.concurrent.ExecutorService
import java.util.concurrent.Executors
public class ThreadPoolServer {
private int port = 8000
private ServerSocket serverSocket
private ExecutorService executorService //线程池
private final int POOL_SIZE = 4 //单个CPU时线程池中的工作线程数目
public ThreadPoolServer() 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) {
try {
new ThreadPoolServer().service()
} catch (IOException e) {
e.printStackTrace()
}
}
}
class Handler implements Runnable {
private Socket socket
public Handler(Socket socket) {
this.socket = socket
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream()
return new PrintWriter(socketOut, true)
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream()
return new BufferedReader(new InputStreamReader(socketIn))
}
public String echo(String msg) {
return "echo:" + msg
}
@Override
public void run() {
try {
System.out.println("New connection accepted:" + socket.getInetAddress() + ":" + socket.getPort())
BufferedReader br = getReader(socket)
PrintWriter pw = getWriter(socket)
String msg = null
while ((msg = br.readLine()) != null) {
System.out.println(msg)
pw.println(echo(msg))
if (msg.equals("bye")) {
break
}
}
} catch (IOException e) {
e.printStackTrace()
} finally {
try {
if (socket != null)
socket.close()
} catch (IOException e) {
e.printStackTrace()
}
}
}
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)