目标:模拟网络文件下载,准备一个服务器,一个客户端,服务器能够提供多用户同时文件下载,且若出现异常(断点,停止)下次能够接着之前的位置继续下载,服务端可显示进度
思路:服务器根据指定端口提供服务,当然作为服务器需要24小时不停运行,死循环是必须的,一旦有客户端连接进来,拿到对应的连接,然后对这个连接进行文件传输任务(多线程实现),首先将文件名和文件的大小发送给客户端,客户端收到后根据得到的文件名创建一个新文件。在文件开始传输之间需要先读取之前断开的位置,服务器这边的断点位置以客户端的为准,所以需要客户端发送断点位置,第一次传送是没有位置的,所以发送过来的是位置0,即从0开始,然后开始文件的传送。这个实现创建了3个类,Server(服务器),Server2(用来提供服务的),Client(客户端),具体代码如下:
public class Server{
File file;
public Server(String path){
this.file = new File(path);
}
public void send(){
try {
ServerSocket ss = new ServerSocket(8888);
// 服务器死循环不停执行
while(true){
// 等待连接
Socket s = ss.accept();
System.out.println("客户端"+s.getInetAddress().getHostAddress