利用java实现服务器和客户端的文件传输

利用java实现服务器和客户端的文件传输


基于TCP/IP协议实现文件传输:读取服务端本地磁盘的文件,通过Socket传输到客户端并存储到客户端磁盘

文件传输服务器:

public class FileServer2 extends Thread{

	private Socket s;
	private File source;
	
	public FileServer2(Socket s, File source) {
		super();
		this.s = s;
		this.source = source;
	}

	@Override
	public void run() {
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		try {
			//获取源文件的输入流
			bis = new BufferedInputStream(new FileInputStream(source));
			//获取socket的输出流并包装
			bos = new BufferedOutputStream(s.getOutputStream());
			
			byte[] b = new byte[1024];
			int len = 0;
			System.out.println("向 "+s.getInetAddress().getHostAddress()+"开始传输....");
			while((len = bis.read(b)) != -1){
				bos.write(b, 0, len);
			}
			System.out.println("向 "+s.getInetAddress().getHostAddress()+"传输完成!");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				if(bos != null)bos.close();
				if(bis != null)bis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
	
	public static void main(String[] args) throws IOException {
		ServerSocket server = new ServerSocket(6666);
		System.out.println("SOFEEM文件服务器已启动,等待连接...");
		//准备需要传输的文件对象
		File source = new File("D:\\素材\\视频\\larva搞笑虫子\\1.mp4");
		//循环监听
		while(true){
			//等待客户端连接
			Socket s = server.accept();
			System.out.println(s.getInetAddress().getHostAddress()+"进入服务器,准备传输...");
			//根据每一个连接的客户端启动一条子线程
			new FileServer2(s, source).start();
		}
	}
	
}

文件传输客户端

public class Client {

	public static void main(String[] args) throws UnknownHostException, IOException {
		
		//建立连接
		Socket s = new Socket("192.168.4.198",6789);
		//获取socket的输入流
		InputStream is = s.getInputStream();
		DataInputStream dis = new DataInputStream(is);
		
		//准备file对象接受socket中的数据
		File f = new File("C:\\Users\\mrchai\\Desktop\\1.mp4");
		FileOutputStream fos = new FileOutputStream(f);
	
		byte[] b = new byte[1024];
		int len = 0;
		while((len = dis.read(b)) != -1){
			fos.write(b, 0, len);
		}
		
		fos.close();
		dis.close();
		s.close();
	}
}

注意事项:

  1. 先启动服务端,再启动客户端
  2. 服务端不要反复启动,除非上一次启动的服务停止了,否则会出现端口占用异常(JVM_Bind)

你可能感兴趣的:(利用java实现服务器和客户端的文件传输)