Java 从服务端向客户端文件传输

该博客介绍了如何使用Java实现从服务端向客户端传输文件的程序。服务端通过阻塞式Socket接受客户端连接,用文件流发送文件,而客户端则等待接收并保存文件。文章提供了服务端和客户端的源码以及运行结果。
摘要由CSDN通过智能技术生成

简介

____最近看Gem5,需要用到Linux系统下的一些回馈,为了简化分析,就想要直接把生成的数据文件下载到本地。搜索了几篇博客,大多是讲将文件从客户端发给云服务器的。我自己学习了一下,并且加以修改,写了一个简单的从服务端向客户端反馈文件的程序。


服务端思路:

服务端通过阻塞式接受请求获得连接,建立线程开始处理此请求。通过文件流的方式传输给客户端,这个过程可以放在对客户端发出的一系列请求之后,各位可以自行添加。


客户端思路:

由于本文是由服务端向客户端发文件,且必定需要收到一个文件,所以只需要在线性执行等待接收文件的过程即可,接收完再关闭连接。相对于服务端,客户端通过写入流,将文件保存到指定目录(若不存在则创建目录)的同名文件。


以下为代码实现

服务端源码

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.ServerSocket;
import java.net.Socket;


/**
 * 文件传输server(由服务器发送)
 * 
 * @author Walskor
 * @Date 2020年3月28日
 * @version 1.0
 */
public class Transfer_Server extends ServerSocket{
   
	private static final int Server_PORT = 8888; //服务器端口
	
	private ServerSocket server;
	
	
	public Transfer_Server() throws Exception{
   
		super(Server_PORT);
		this.server = this;
	}
	
	public static void main(String[] args) {
   
		System.out.println("Server starting...");
		
		try {
   
			Transfer_Server transfer = new Transfer_Server();
			transfer.waiting();
			if(transfer!=null) {
   
				transfer.close();
			}
		} catch (Exception e) {
   
			System.out.println("Error: "+ e.getMessage());
		}
	}
	/**
	 * 等待连接
	 * @throws Exception
	 */
	public void waiting() throws Exception{
   
		while(true) {
   
			//当阻塞时接受新的连入请求
			Socket client = this.accept();
			//并建立新的线程进行处理
			new Handler(client);
		}
	}
}
/**
 * 线程处理类
 * @author Walskor
 *
 */

class Handler implements Runnable{
   
	private String FileURL = null;  //文件路径
	
	private Socket socket;
	
	private FileInputStream fileIn;
	private DataOutputStream DataOUT;
	
	public Handler(Socket client) {
   
		this.socket = client;
		new Thread(this).start();
	}
	
	@Override
	public void run() {
   
		try {
   
			setFileURL("D:\\DownLoads\\Chrome\\161840230754060.doc ");
			sendFile(FileURL
  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值