直接上源码:

服务器:

 1 package download;
 2
 3 import java.io.BufferedInputStream;
 4 import java.io.BufferedOutputStream;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.IOException;
 8 import java.io.OutputStream;
 9 import java.net.ServerSocket;
10 import java.net.Socket;
11
12 /**
13  * 目的:利用socket实现文件的下载。当有客户端连接到服务器时,自动从服务器上下载文件,客户端
14  *     按照系统毫秒数对下载的文件命名。
15  * 准备:服务器上准备要下载的文件d:/1.mp3。客户端接受文件后,将文件保存在d盘,文件采取系统毫秒数命名。
16  */
17 public class Server {
18
19     private ServerSocket ss;
20     private int port = 8080;//服务器开放的端口号
21     /**利用构造方法,初始化ServerSocket*/
22     public Server(){
23         try {
24             ss = new ServerSocket(port);
25         } catch (IOException e) {
26             e.printStackTrace();
27         }
28     }
29     /**服务器启动,等待客户端进入。当客户端进入,就产生socket对象,并将该对象交给线程去执行*/
30     public void start(){
31         while(true){
32             try {
33                 Socket s = ss.accept();//等待客户端进入
34                 Thread thread = new Thread(new Handler(s));//利用构造器传参数
35                 thread.run();
36             } catch (IOException e) {
37                 e.printStackTrace();
38             }
39         }
40     }
41     private class Handler implements Runnable {
42         private Socket s;
43         private byte[] buf = new byte[1024];//1K大小的缓冲区
44         public Handler(Socket s) {
45             this.s = s;
46         }
47
48         public void run() {
49             try {
50                 File sourceFile = new File("d:/1.mp3");
51                 FileInputStream fis = new FileInputStream(sourceFile);
52                 BufferedInputStream bis = new BufferedInputStream(fis);
53                 OutputStream os = s.getOutputStream();
54                 BufferedOutputStream bos = new BufferedOutputStream(os);
55                 int size = -1;
56                 while((size=bis.read(buf))!=-1){
57                     bos.write(buf,0,size);
58                     bos.flush();
59                 }
60                 s.close();
61                 fis.close();
62             } catch (Exception e) {
63                 e.printStackTrace();
64             }
65         }
66
67     }
68     public static void main(String[] args) {
69         Server s = new Server();
70         s.start();
71     }
72 }

客户端:

 1 package download;
 2
 3 import java.io.BufferedInputStream;
 4 import java.io.BufferedOutputStream;
 5 import java.io.File;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
 8 import java.io.InputStream;
 9 import java.net.Socket;
10 import java.net.UnknownHostException;
11 /**客户端程序,负责从客户端下载文件*/
12 public class Client {
13     private Socket s;
14     private byte[] buf = new byte[1024];//1K大小的缓冲区
15
16     public void start(){
17         try {
18             s = new Socket("192.168.1.103", 8080);
19             String fileName = "d:/"+System.currentTimeMillis()+".mp3";
20             File targetFile = new File(fileName);
21             targetFile.createNewFile();
22             FileOutputStream fos = new FileOutputStream(targetFile);
23             BufferedOutputStream bos = new BufferedOutputStream(fos);
24             InputStream is = s.getInputStream();
25             BufferedInputStream bis = new BufferedInputStream(is);
26             int size = -1;
27             while((size=bis.read(buf))!=-1){
28                 bos.write(buf,0,size);
29                 bos.flush();
30             }
31             s.close();
32             fos.close();
33         } catch (UnknownHostException e) {
34             e.printStackTrace();
35         } catch (IOException e) {
36             e.printStackTrace();
37         }
38     }
39     public static void main(String[] args) {
40         Client c = new Client();
41         c.start();
42     }
43 }

转载于:https://www.cnblogs.com/miyin/p/4012603.html

自己动手写简单的web应用服务器(4)—利用socket实现文件的下载相关推荐

  1. 自己动手写简单的web应用服务器(1)—tcp通信

    1.socket简介: socket通常称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打 ...

  2. 自己动手写了个 Web 框架,我膨胀了

    ‍ 作为一线开发 Web 服务的工程师,我用过不少语言的不少框架,尤其近几年轮子层出不穷,每次刚用熟练一个,就有更新.更好的出现了.日常疲于奔命学习新框架,一次次陷入"死循环". ...

  3. 简单php web ftp服务器,php 上传文件到ftp服务器的简单示例(单文件)

    搜索热词 PHP上传单个文件到ftp服务器的演示范例,感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧. 经测试代码如下: /** * 上传文件到ftp服务器 * * @param ...

  4. 深入学习Tomcat----自己动手写服务器(附服务器源码)

    相信大多Web开发者对Tomcat是非常熟悉的,众所周知Tomcat是一款非常好用的开源Servlet容器,您一定对这个最流行的Servlet容器充满好奇,虽然它并不像一个黑盒子那样让人无法触摸但是T ...

  5. php怎么自己写框架,PHP学习笔记,自己动手写个MVC的框架

    最新在大家自己的博客的过程中,发现各种开源的博客系统都或多或少的用起来别扭.于是想动手自己写个博客系统.既然写,就想好好写.那就先写个MVC框架.一点一点来.写的过程中有很多想法.还希望大家能够多多指 ...

  6. 自己动手写php web server

    最近在做一个web缓存系统,作为一个web缓存系统,肯定得有一个web服务器的功能,即实现简单的http协议.于是,干脆自己动手写一个php的web server.(注明:本文的源码,可以在本人的资源 ...

  7. 【生生不息原创】自己动手写Web自动化测试框架3 - 操纵Web控件

    原创:http://www.colblog.net/node/136 上面的两次课程我们介绍了mshtml和SHDocVw的一些用途,以及如何打开并且附加到IE上,实现IE的宏观上的控制. 这次我们将 ...

  8. ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

    原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...

  9. 自己动手写第一阶段的处理器(1)——计算机的简单模型、架构、指令系统

    我们会继续上传新书<自己动手写处理器>(未公布),今天是第二,我每星期试试4 第1章 处理器与MIPS 时间開始了. --胡风 · 1949 让我们以一句诗意的话,開始本书的阅读. 时间从 ...

最新文章

  1. python sftp传输文件总是报文件不存在_Paramiko:通过SFTP传输文件时,windows文件路径出错...
  2. mq3.8.9版本有什么不同_Python3.9版本新特性:字典合并操作的详细解读
  3. Android View Binding的使用
  4. Java并发基础02. 传统线程技术中的定时器技术
  5. 关于计算机网络的英语演讲稿,上网利弊的英语演讲稿范文
  6. 【2019牛客多校第七场:H】Pair(数位dp)
  7. ffmpeg 下载网上m3u8的视频文件
  8. 第三篇: DDcGAN-用于多分辨率图像融合的双判别器生成对抗网络
  9. Data Shapley: Equitable Valuation of Data for Machine Learning(翻译)
  10. Android学习笔记--Notification(通知)
  11. Aspect Level Sentiment Classification with Deep Memory Network
  12. Gradle下载与安装
  13. 11.12. ACLs
  14. 腾讯云服务器无法使用账号密码登录
  15. 约瑟夫问题的理解与解决(丢手帕问题)
  16. 两个div并排 左边div宽固定 右边自适应
  17. 谁打开了便携笔记本的潘多拉盒子
  18. 东方新山水摄影在好莱坞引起新潮流
  19. 标题:引发国际关注,CoinDesk、雅虎财经北美等持续报道
  20. android 导出Excel列表

热门文章

  1. 2022-2028年中国康养地产行业市场需求前景及投资战略分析报告
  2. 桌子上有个盘子_日本留学生活:留学生在餐厅刷盘子的传闻,竟然在自己身上上演...
  3. Docker 入门系列(7)- Dockerfile 使用(FROM、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、WORKDIR)
  4. TF-IDF 原理及sklearn中的tf-idf实例分析
  5. 虚拟机网络连接方式linuxcentos
  6. LeetCode简单题之圆形赛道上经过次数最多的扇区
  7. Python:urllib2模块的基本使用
  8. Cocos creator加载场景、加载场景回调、预加载场景
  9. php dedecms 记录访问者ip,dedecms实现显示访问者ip地址的方法
  10. python sys.argv[] 的作用