Java开发笔记(一百一十五)使用Socket开展文件传输

本文介绍了如何使用Java的Socket在客户端和服务端之间进行文件传输。通过建立Socket连接,利用I/O流读写文件数据,文章提出了两种判断文件传输结束的技术方案,并选择了每次连接只发送一个文件的方法以简化编码。客户端和服务器端的代码示例展示了具体实现过程,测试结果显示Socket成功完成了文件传输。
摘要由CSDN通过智能技术生成

前面介绍了怎样通过Socket在客户端与服务端之间传输文本,当然Socket也支持在客户端与服务端之间传输文件,因为文件本身就是通过I/O流实现读写操作的,所以在套接字的输入输出流中传输文件真是再合适不过了。只是套接字属于长连接,倘若Socket一直不关闭,连接将总是处于就绪状态,也就无法判断文件数据是否已经传输完成。为了检验文件传输的结束时刻,可以考虑实时下列的两种技术方案之一:
1、客户端每次连上Socket之后,只发送一个文件的数据,且发送完毕的同时立即关闭套接字,从而告知服务端已经成功发送文件,不必继续保留这个Socket。
2、客户端的Socket连上了服务端,仍然像文本传输那样保持长连接,但是另外定义文件传输的专用数据格式,比如每次传输操作都由开始指令、文件数据、结束指令这些要素组成。然后客户端按照该格式发送文件,服务端也按照该格式接收文件,由于传输操作包含开始指令和结束指令,所以即使客户端不断开连接,服务端也能凭借开始指令和结束指令来分清文件数组的开头和结尾。
考虑到编码的复杂度,这里采取前一种方案,即每次Socket连接只发送一个文件。据此编写的文件发送任务框架类似于文本发送任务,差别在于待发送的数据来自于本地文件,详细的客户端主要代码示例如下:

//定义一个文件发送任务
public class SendFile implements Runnable {
	// 以下为Socket服务器的IP和端口,根据实际情况修改
	private static final String SOCKET_IP = "192.168.1.8";
	private static final int FILE_PORT = 52000; // 文件传输专用端口
	private String mFilePath; // 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值