一、创建服务器端
public class DownloadServer { public static void main(String[] args) throws Exception{ ServerSocket server=new ServerSocket(55021); while(true){ Socket socket=server.accept(); System.out.println("连接建立成功!"); //创建接受客户端发送来的字符输入流对象 BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //创建字符输出流对象 PrintWriter pw=new PrintWriter(socket.getOutputStream()); StringBuilder sbu=new StringBuilder(); String s=br.readLine(); if(s.equals("image")){ //创建文件对象 File file=new File("service"); File[] files = file.listFiles(); for(File f:files){ System.out.print(f.getName()+"\t"); sbu.append(f.getName()+","); } pw.println(sbu); pw.flush(); br.close(); pw.close(); }else{ File file=new File("service/"+s); //创建二进制输入流对象,读取目录下的文件 DataInputStream dis=new DataInputStream(new FileInputStream(file)); //创建二进制输出流对象,向客户端发送数据 DataOutputStream dos=new DataOutputStream(socket.getOutputStream()); byte[] bytes=new byte[1024]; int data; //读取目录下的文件并向客户端输出二进制流 while((data=dis.read(bytes))!=-1){ dos.write(bytes, 0,data); } dos.close(); dis.close(); br.close(); socket.close(); } } } }
二、创建客户端
public class DownloadClient { static Socket socket; public static void main(String[] args) throws Exception{ Scanner input=new Scanner(System.in); System.out.println("1.图片\t2.视频\t3.音乐"); System.out.print("请选择序号:"); int num=input.nextInt(); switch(num){ case 1: String[] str=getName(); for(int i=1;i<=str.length;i++){ System.out.print(i+","+str[i-1]+"\t"); } System.out.print("\n请选择你要下载的图片序号:"); int num2=input.nextInt(); download(str[num2-1]); break; case 2: break; case 3: break; } } public static String[] getName() throws Exception{ //创建socket对象 socket=new Socket("127.0.0.1",55021); PrintWriter pw=new PrintWriter(socket.getOutputStream()); pw.println("image"); pw.flush(); //获取服务端传过来的数据 BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); String s=br.readLine(); br.close(); pw.close(); socket.close(); return s.split(","); } public static void download(String name) throws Exception { socket=new Socket("127.0.0.1",55021); PrintWriter pw=null; DataInputStream dis=null; DataOutputStream dos = null; try { //创建输出流,并发送要下载的图片名称 pw = new PrintWriter(socket.getOutputStream()); pw.println(name); pw.flush(); //接受客户端发送来的二进制流 dis=new DataInputStream(socket.getInputStream()); //要写入的文件路径和写入方式 dos=new DataOutputStream(new FileOutputStream("download/"+name,true)); byte[] bytes=new byte[1024]; int data; //读取二进制流并复制 while((data=dis.read(bytes))!=-1){ dos.write(bytes,0,data); } }catch(Exception e){ e.printStackTrace(); }finally { try { dos.close(); dis.close(); pw.close(); socket.close(); } catch (Exception e) { e.printStackTrace(); } } } }