自己动手写简单的web应用服务器(4)—利用socket实现文件的下载
直接上源码:
服务器:
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实现文件的下载相关推荐
- 自己动手写简单的web应用服务器(1)—tcp通信
1.socket简介: socket通常称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打 ...
- 自己动手写了个 Web 框架,我膨胀了
作为一线开发 Web 服务的工程师,我用过不少语言的不少框架,尤其近几年轮子层出不穷,每次刚用熟练一个,就有更新.更好的出现了.日常疲于奔命学习新框架,一次次陷入"死循环". ...
- 简单php web ftp服务器,php 上传文件到ftp服务器的简单示例(单文件)
搜索热词 PHP上传单个文件到ftp服务器的演示范例,感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编来看看吧. 经测试代码如下: /** * 上传文件到ftp服务器 * * @param ...
- 深入学习Tomcat----自己动手写服务器(附服务器源码)
相信大多Web开发者对Tomcat是非常熟悉的,众所周知Tomcat是一款非常好用的开源Servlet容器,您一定对这个最流行的Servlet容器充满好奇,虽然它并不像一个黑盒子那样让人无法触摸但是T ...
- php怎么自己写框架,PHP学习笔记,自己动手写个MVC的框架
最新在大家自己的博客的过程中,发现各种开源的博客系统都或多或少的用起来别扭.于是想动手自己写个博客系统.既然写,就想好好写.那就先写个MVC框架.一点一点来.写的过程中有很多想法.还希望大家能够多多指 ...
- 自己动手写php web server
最近在做一个web缓存系统,作为一个web缓存系统,肯定得有一个web服务器的功能,即实现简单的http协议.于是,干脆自己动手写一个php的web server.(注明:本文的源码,可以在本人的资源 ...
- 【生生不息原创】自己动手写Web自动化测试框架3 - 操纵Web控件
原创:http://www.colblog.net/node/136 上面的两次课程我们介绍了mshtml和SHDocVw的一些用途,以及如何打开并且附加到IE上,实现IE的宏观上的控制. 这次我们将 ...
- 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 ...
- 自己动手写第一阶段的处理器(1)——计算机的简单模型、架构、指令系统
我们会继续上传新书<自己动手写处理器>(未公布),今天是第二,我每星期试试4 第1章 处理器与MIPS 时间開始了. --胡风 · 1949 让我们以一句诗意的话,開始本书的阅读. 时间从 ...
最新文章
- python sftp传输文件总是报文件不存在_Paramiko:通过SFTP传输文件时,windows文件路径出错...
- mq3.8.9版本有什么不同_Python3.9版本新特性:字典合并操作的详细解读
- Android View Binding的使用
- Java并发基础02. 传统线程技术中的定时器技术
- 关于计算机网络的英语演讲稿,上网利弊的英语演讲稿范文
- 【2019牛客多校第七场:H】Pair(数位dp)
- ffmpeg 下载网上m3u8的视频文件
- 第三篇: DDcGAN-用于多分辨率图像融合的双判别器生成对抗网络
- Data Shapley: Equitable Valuation of Data for Machine Learning(翻译)
- Android学习笔记--Notification(通知)
- Aspect Level Sentiment Classification with Deep Memory Network
- Gradle下载与安装
- 11.12. ACLs
- 腾讯云服务器无法使用账号密码登录
- 约瑟夫问题的理解与解决(丢手帕问题)
- 两个div并排 左边div宽固定 右边自适应
- 谁打开了便携笔记本的潘多拉盒子
- 东方新山水摄影在好莱坞引起新潮流
- 标题:引发国际关注,CoinDesk、雅虎财经北美等持续报道
- android 导出Excel列表
热门文章
- 2022-2028年中国康养地产行业市场需求前景及投资战略分析报告
- 桌子上有个盘子_日本留学生活:留学生在餐厅刷盘子的传闻,竟然在自己身上上演...
- Docker 入门系列(7)- Dockerfile 使用(FROM、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、WORKDIR)
- TF-IDF 原理及sklearn中的tf-idf实例分析
- 虚拟机网络连接方式linuxcentos
- LeetCode简单题之圆形赛道上经过次数最多的扇区
- Python:urllib2模块的基本使用
- Cocos creator加载场景、加载场景回调、预加载场景
- php dedecms 记录访问者ip,dedecms实现显示访问者ip地址的方法
- python sys.argv[] 的作用