文件传输和秒传

本文涉及的产品
云解析 DNS,旗舰版 1个月
密钥管理服务KMS,1000个密钥,100个凭据,1个月
全局流量管理 GTM,标准版 1个月
简介:

InetAddress类是IP地址的封装类,就是把设定的某个ip封装成InetAddress对象,然后使用这个对象能够进行相关的操作。例如获取域名或主机名、上网ip等等。这个类不能直接new,需要通过方法来获得对象,不同的方法可以得到不同的InetAddress对象。

代码示例:

92372263e4561962006f99ca79fc9290.png


运行结果:

883b1ba28485fc88b5dac685241004cf.png



得到不同的InetAddress对象,能够进行不同的操作,使用IP地址创建InetAddress对象(getByName,getAllByName,getByAddress方法都可以通过IP地址创建InetAddress对象)时,并不需要访问DNS服务器。因此,通过DNS服务器查找域名的工作就由getHostName方法来完成。使用IP地址创建InetAddress对象(getByName,getAllByNamegetByAddress方法都可以通过IP地址创建InetAddress对象)时,并不需要访问DNS服务器。因此,通过DNS服务器查找域名的工作就由getHostName方法来完成。

 

代码示例:

8d176b8e08e4b1325437ebb09b8f49c0.png


运行结果:

7a544f3ac913679103ace17e70dbebd9.png


获得某个主机名的全部信息:

e512801cf180842a13d3225dd9e896cc.png


运行结果:

34f724b29d943be2ba9668fdfc37a753.png


封装某个ip地址:

c9575aa1ded8277785829b067084b7c5.png


运行结果:

d3848093079d94a4046b638fec971b66.png



ServerSocket类的构造器:

ServerSocket类有几个构造器,这些构造器可以定义一些设置,例如限制同时连接次数、限制IP地址连接等等,如果要限制连接的IP则需要使用刚才的InetAddress类的对象,需要把允许连接的IP封装InetAddress对象,才能通过构造器的参数传递。

  ServerSocket类的构造器:

39d8d8f327a21e2b174c2317210bb27a.png


代码示例:

6b257fe102b1f4eb6db274d38282fdad.png



文件传输:

服务器向客户端传输文件叫下载,客户端向服务器传输文件叫上传。我们可以使用ServerSocketSocket编写服务端和客户端进行文件的传输。

实际上文件传输很简单,就像文件复制一样,只不过通过的流是网络流。客户端先用FileInputStream流读取文件,然后通过OutputStream传输到服务端,服务端则用InputStream接收文件数据的同时,通过FileOutputStream传输到本地上。

  服务端代码示例:

72592bdabafdb61cfc4169695c289239.png



客户端代码示例:

9796fcf598500d6ade87aa9a55fcd76f.png


运行结果:

81eb5bd543649a7605ce643181df5d46.png



秒传:

秒传的原理实际上,是利用MD5加密文件,因为只要是文件内容一样的,加密出来的MD5密匙就是一样的。所以利用这一特性,客户端上传文件时会先将文件加密成MD5,然后服务端只需要对比一下服务端上的MD5就可以知道是否有这个文件了,如果有这个文件就不需要上传了,就达到“秒传”的效果。像网盘的原理也是这样的,服务器端不会有重复的文件,每个客户端下载、存储的其实都是同一个文件。

如果需要编写一个这种秒传机制的客户端和服务端,需要一个MD5加密类,一般在百度就能下载到,然后把这个类复制到工程目录下以备使用。

MD5加密类代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import  java.io.File;
import  java.io.FileInputStream;
import  java.io.IOException;
import  java.nio.MappedByteBuffer;
import  java.nio.channels.FileChannel;
import  java.security.MessageDigest;
import  java.security.NoSuchAlgorithmException;
  
public  class  MD5FileUtil {
  
protected  static  char  hexDigits[] = {  '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 'a' 'b' 'c' 'd' 'e' , 'f'  };
protected  static  MessageDigest messagedigest =  null ;
  
static  {
try  {
messagedigest = MessageDigest.getInstance( "MD5" );
catch  (NoSuchAlgorithmException e) {
}
}
  
public  static  String getFileMD5String(File file)  throws  IOException {
FileInputStream in =  new  FileInputStream(file);
FileChannel ch = in.getChannel();
MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY,  0 , file.length());
messagedigest.update(byteBuffer);
return  bufferToHex(messagedigest.digest());
}
  
public  static  String getMD5String(String s) {
return  getMD5String(s.getBytes());
}
  
public  static  String getMD5String( byte [] bytes) {
messagedigest.update(bytes);
return  bufferToHex(messagedigest.digest());
}
  
private  static  String bufferToHex( byte  bytes[]) {
return  bufferToHex(bytes,  0 , bytes.length);
}
  
private  static  String bufferToHex( byte  bytes[],  int  m,  int  n) {
StringBuffer stringbuffer =  new  StringBuffer( 2  * n);
int  k = m + n;
for  ( int  l = m; l < k; l++) {
appendHexPair(bytes[l], stringbuffer);
}
return  stringbuffer.toString();
}
  
private  static  void  appendHexPair( byte  bt, StringBuffer stringbuffer) {
char  c0 = hexDigits[(bt &  0xf0 ) >>  4 ];
char  c1 = hexDigits[bt &  0xf ];
stringbuffer.append(c0);
stringbuffer.append(c1);
}
  
public  static  boolean  checkPassword(String password, String md5PwdStr) {
String s = getMD5String(password);
return  s.equals(md5PwdStr);
}
  
}



客户端代码示例:

34d69f1215a69ece2065ebe35e4f6bce.png


服务端代码示例:

7c872b42b8496e95b44c294cdc4c12b5.png

f3f1e1ebafe4b87783a2d2c7a1486923.png



运行结果:

833d51279c4e9144d9edc6a152f8fc21.png




本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/1976677,如需转载请自行联系原作者

相关文章
|
存储 网络协议 安全
使用 NetCat 工具实现远程文件传输
NetCat(NC)是一个通过 TCP/UDP 在网络中进行读写数据工具,主要用于调式领域,传输领域甚至黑客攻击领域。利用 NetCat 工具,可以将网络中的完整数据发送至另一台主机终端显示或存储,常见的应用为文件传输、与好友即时通信、传输流媒体等功能。
482 0
使用 NetCat 工具实现远程文件传输
|
3月前
|
安全 Linux Go
croc-文件传输工具
croc-文件传输工具
|
6月前
|
Linux 网络安全 数据安全/隐私保护
FTP 文件传输服务
FTP 文件传输服务
|
6月前
|
网络协议 安全 网络安全
OpenWRT配置SFTP远程文件传输,让数据分享更安全
OpenWRT配置SFTP远程文件传输,让数据分享更安全
148 0
|
6月前
|
Shell
VBA实现ftp文件传输
VBA实现ftp文件传输
197 0
|
网络安全 开发工具 数据安全/隐私保护
阿里云搭建FTP服务器,完成文件传输
本文主要使用搭建FTP服务器的系统是ubuntu18.04,租的服务器是阿里云服务器(ecs.t6-c1m1.large)。决定想在服务器上搭建FTP主要是为了方便传输文件,网上方法众多,因此我将我从头到尾搭建FTP并且传输文件的步骤和问题记录在此,方便想尝试的人学习。
阿里云搭建FTP服务器,完成文件传输
|
网络协议 安全 Linux
FTP文件传输
FTP文件传输
FTP文件传输
|
网络协议 数据安全/隐私保护
【计算机网络】应用层 : FTP 文件传输协议 ( FTP 客户端 和 服务器 | FTP 工作原理 | FTP 传输模式 )
【计算机网络】应用层 : FTP 文件传输协议 ( FTP 客户端 和 服务器 | FTP 工作原理 | FTP 传输模式 )
466 0
|
安全 数据安全/隐私保护
文件传输解决方案都有哪些?
文件传输是一个通用术语,适用于通过计算机网络传输数据的行为,私有或公共。托管文件传输旨在促进文件传输,它是一种软件或服务,用于通过网络提供安全的内部,外部和临时数据传输。文件传输软件作为使用ad-hoc文件传输解决方案(如FTP,SFTP,HTTP等)的替代方案助力公司企业进行文件传输。
1994 0
|
安全 程序员 数据安全/隐私保护
镭速raysync介绍文件传输软件的进史
第一个文件通过可移动媒体交换。在1980年代中期,异步调制解调器接管了双同步停止的地方。然后,在九十年代,互联网改变了使用持久连接通过HTTP,FTP和SMTP在企业之间传输文件的游戏。随后几年出现了大量B2B管理大文件传输解决方案,这些解决方案帮助组织满足移动信息日益增长的安全性,合规性和运营需求。
1588 0