Java网络文件传输

java网络编程怎样实现文件传输? 设计一个简单的文件传输程序,服务器接受文件,客户端发送文件,设计一个简单的文件传输协议,比如,先传输文件名,再传输文件大小,再传输文件内容。 设计不合理。 一个文件信息,不需要分成几个包来来回回请求应答。 协议格式类似如下: 8位数据包总长+3位文件名长度+文件名+8位文件内容长度+文件内容 以上为变长报文格式,举例如下: 00001048+008+test.txt+00001024+文件内容 要么像2L所定义的协议那样发送,简单 要么就像你期望的那样,定义协议位数据长度(固定长度)+数据类型(.. 阅读详情

Java 网络文件传输

读者范围:

本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解.

正文:

关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论:

图1:

分析图1我们基本可以知道从服务器文件系统中通过流把文件中的数据写入到服务器的进程中,然后把进程中的数据通过网络IO系统传递到客户机,这个阶段,网络中的数据以字节流的形式保存.当该字节流被客户进程接受后,客户进程通过客户本地文件流写入客户本地的文件系统中.

 

根据以上分析,我们基本可以确定我所需要处理的问题了.首先我们需要可以对本地文件系统IO操作的操作接口,然后是一个可以对网络IO系统进行操作的操作接口,已经一个可以把数据包装成字节流的操作接口,他们分别可以提供客户和服务器两个进程进行读写的操作.如下图所示:

 

图2:

 

根据以上分析,我们可以把问题归结到对以下编程接口的需求上:

 

1.         字节包装器和字节解包器,

 

2.         网络传输器和网络接收器

 

3.         本地文件读/写器

 

 

 

而这些Java本身的API就已经提供.他们都被包装到java.io和java.net这两个包里,这里我提供一个基于TCP/IP的实现版本,使用基于连接的方式来完成工作.我们首先介绍几个相关的JDK中的类来完成以上任务,

 

1.       DataOutputStream和DataInputStream实现类提供了上面的字节包装和解包器的实现

 

2.       ServerSocket和Socekt提供了基于连接的网络传输和接受接口

 

3.       File,FileInputStream和FileOutputStream提供了基本的本地文件输入输出接口.

 

 

 

 

 

服务器端实现代码:

 

import java.io.*;

 

import java.net.*;

 

 

 

public class FileServer{

 

       public static void main(String[] args)throws Exception{

 

              //创建文件流用来读取文件中的数据

 

              File file=new File("lishengjie.jpg");

 

              FileInputStream fos=new FileInputStream(file);

 

             

 

              //创建网络服务器接受客户请求

 

              ServerSocket ss=new ServerSocket(3108);

 

              Socket client=ss.accept();

 

             

 

              //创建网络输出流并提供数据包装器

 

              OutputStream netOut=client.getOutputStream();

 

              OutputStream doc=new DataOutputStream(new BufferedOutputStream(netOut));

 

             

 

              //创建文件读取缓冲区

 

              byte[] buf=new byte[2048];

 

              int num=fos.read(buf);

 

              while(num!=(-1)){//是否读完文件

 

                     doc.write(buf,0,num);//把文件数据写出网络缓冲区

 

                     doc.flush();//刷新缓冲区把数据写往客户端

 

                     num=fos.read(buf);//继续从文件中读取数据

 

              }

 

              fos.close();

 

              doc.close();

 

       }

 

}

 

 

 

客户方实现代码:

 

import java.io.*;

 

import java.net.*;

 

 

 

public class FileClient{

 

       public static void main(String[] args)throws Exception{

 

              //使用本地文件系统接受网络数据并存为新文件

 

              File file=new File("newFile.jpg");

 

              file.createNewFile();

 

              RandomAccessFile raf=new RandomAccessFile(file,"rw");

 

             

 

              // 通过Socket连接文件服务器

 

              Socket server=new Socket(InetAddress.getLocalHost(),3108);

 

             

 

              //创建网络接受流接受服务器文件数据

 

              InputStream netIn=server.getInputStream();

 

              InputStream in=new DataInputStream(new BufferedInputStream(netIn));

 

             

 

              //创建缓冲区缓冲网络数据

 

              byte[] buf=new byte[2048];

 

              int num=in.read(buf);

 

             

 

              while(num!=(-1)){//是否读完所有数据

 

                     raf.write(buf,0,num);//将数据写往文件

 

                     raf.skipBytes(num);//顺序写文件字节

 

                     num=in.read(buf);//继续从网络中读取文件

 

              }

 

              in.close();

 

              raf.close();

 

       }

 

}

归结以上代码:

服务器

客户端

1.       服务器从本地文件系统读取文件

2.       服务器创建网络服务连接

3.       服务器提供数据包装器

4.       服务器将本地文件写入数据包装器

5.       服务器通过包装器写入到网络

1.       客户端建立新文件准备存储来自网络的数据

2.       客户端连接服务器

3.       客户端通过网络接受服务器数据并进行数据解包

4.       客户端将数据写入缓冲区

5.       客户端从缓冲区把数据写入客户本地文件

 

总结:

    事实上java的开发环境为我们提供大多数的编程接口,为我们简化了开发工作量.我们通过java的IO接口所提供的文件,数据包装器等接口非常方便的解决了我们上面的开发工作量.同时在java的net接口所提供的套接字也使得基于连接的数据接受和发送成为非常容易的工作.

Java 网络编程 之 UDP 文件传输 http://www.verejava.com/?id=16994922158226服务器端 package com.udp; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Datagra... 阅读详情

相关推荐

java实现文件传输(附完整源码)

java实现文件传输(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1329

Java 网络文件传输

Java 网络文件传输作者: 何双江 关键字: Java  何双江  IO  NET  File 读者范围:本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解. 正文:关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示

何双江(yarshray)的专栏 1万+

Java实现文件传输

在Java编程中,我们可以使用各种方法实现文件传输。文件传输是将文件从一个位置传输到另一个位置的过程,可以用于各种应用场景,如文件备份、文件共享等。下面我将介绍一种基于Socket的Java文件传输实现方法。首先,我们需要建立一个服务器和一个客户端来进行文件传输。服务器将监听来自客户端的连接请求,并接收文件数据,而客户端将连接到服务器并发送文件数据。客户端连接到服务器后,将指定的文件数据发送给服务器。在实际应用中,你可能需要添加更多的错误处理和安全性措施,例如校验文件完整性、处理并发连接等。

CyberLancer的博客 596

内网java_java 实现局域网文件传输的实例

java 实现局域网文件传输的实例本文主要实现局域网文件传输的实例,对java 的TCP知识,文件读写,Socket等知识的理解应用,很好的实例,大家参考下,实现代码:ClientFile.java/*** 更多资料欢迎浏览凯哥学堂官网:http://kaige123.com* @author 小沫*/package com.tcp.file;import java.io.File;import ...

weixin_35897853的博客 1054

java写的局域网文件传输系统

java写的局域网文件传输系统,j2se的简单应用

告别重打包:在Android 9上实现免Root的Frida-Gadget持久化Hook(附AOSP源码修改详解)

本文详细介绍了在Android 9上实现免Root的Frida-Gadget持久化Hook技术方案。通过修改AOSP源码,绕过传统重打包方式面临的签名校验和完整性检查,实现在非Root环境下的系统级Hook。文章包含核心代码修改、编译配置调整及调试技巧,为移动安全研究提供高效稳定的解决方案。

weixin_33726313的博客 501

java file 网络文件_Java 网络文件传输

读者范围:本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解.正文:关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论:图1:分析图1我们基本可以知道从服务器文件系统中通过流把文件中的数据写入到服务器的进程中,然后把进程中的数据通...

weixin_30956665的博客 1370

银河麒麟V10系统下VLC播放器安装全攻略(附3.0.9.2版本离线包下载)

本文详细介绍了在银河麒麟V10操作系统无网络环境下,从零开始编译安装VLC 3.0.9.2播放器的完整攻略。通过构建本地YUM仓库解决依赖问题,提供离线资源包下载,并逐步指导完成编译环境配置、软件编译与安装,帮助用户在国产麒麟系统上成功部署强大的多媒体播放能力。

a2b3c4d5e的博客 1214

基于JAVA的网络编程——socket文件传输

基于JAVA的网络编程——socket文件传输 文章目录基于JAVA的网络编程——socket文件传输效果图步骤文件结构实现代码 效果图 步骤 客户端实现步骤: 1.创建一个本地字节输入流FileInputStream对象,构造方法中绑定要读取的数据源 2.创建一个客户端Socket对象 ,构造方法中绑定服务器的IP地址和端口号 3.使用Socket中的方法getOutputStream,获取网络字节输出流0utputStream对象 4.使用本地字节输入流FileInputstream对象中的方法rea

Gowi的博客 1958

基于 Spring Cloud 环境污染物数据分析与预测平台

基于 Spring Cloud 环境污染物数据分析与预测平台

935

【AirPlay】苹果认证MFI学习

配件认证是一个过程,通过这个过程,可验证其配件符合MFi技术规范,并通过苹果指定的任何认证测试。MFi门户中的产品计划 "认证 "页面将指导你完成特定配件所需的认证步骤,并指出何时完成所有要求。在完成所有MFi认证要求之前,你不得制造、分发或销售任何配件。在开始MFi认证过程之前,你必须测试你的配件,以确保它符合最新的MFi技术规范,通过产品计划 "测试计划 "上的所有适用测试,并与它将声称具有兼容性的每个苹果设备兼容。

天天的博客 2276

(转)Java 网络文件传输

<br /><br /> <br />Java 网络文件传输<br /><br />觉得写的挺好,就转过来了。<br />本文是一篇简短入门文章.本文假设读者对Java的IO系统和Java的网络系统有所了解.<br />正文:<br />关于文件传输的问题,实际也是一种IO读写的基本问题.对于网络而言也是一种IO读写问题.因此所谓网络的文件传输实际是两种IO问题的综合讨论.这里我们首先分析一个图示.然后围绕这个图示来讨论:<br />图1:<br />分析图1我们基本可以知道从服务器文件系统中通过流把文件中

crystal_86的专栏 442

【100%通过率】华为od机试C卷【特殊的加密算法】Python 实现

有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下1.明文为一段数字串由0-9组成2.密码本为数字0-9组成的二维数组3.需要按明文串的数字顺序在密码本里找到同样的数字串,密码本里的数字串是由相邻的单元格数字组成,上下和左右是相邻的,注意:对角线不相邻,同一个单元格的数字不能重复使用。

MISAYAONE的博客 5924
上一篇: 比较Vector和ArrayList的不同
下一篇: Rsync 实现文件定时同步
MyObject
博客等级 码龄24年 1粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值