当前位置 : 主页 > 编程语言 > java >

JavaSE基础-网络编程

来源:互联网 收集:自由互联 发布时间:2021-06-28
断点续传:如果服务器文件已经存在了,考虑断点续传,如果文件不存在,传输整个文件 package com.bjsxt.net;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStrea
断点续传:如果服务器文件已经存在了,考虑断点续传,如果文件不存在,传输整个文件
package com.bjsxt.net;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 断点续传
 * 如果服务器文件已经存在了,考虑断点续传,如果文件不存在,传输整个文件
 * @author yhl
 *
 */
public class BreakPointUploadServer {

	public static void main(String[] args) throws Exception{
		ServerSocket ss = new ServerSocket(1777);
		
		Socket socket = ss.accept();
		
		InputStream is = socket.getInputStream();
		DataInputStream dis =new DataInputStream(is);
		String fileName = dis.readUTF();
		//本地文件是否存在
		File file = new File("c:/7/"+fileName);
		
		DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
		if(file.exists()){
			//告诉客户端,已经发送了多大的文件。
			//服务器得到文件的大小
			long size = file.length();
			dos.writeLong(size);
		}else{
			dos.writeLong(0);
		}
		dos.flush();
		//读发送过来的数据,写出到本地
		BufferedInputStream bis = new BufferedInputStream(is);
		//尾部追加数据 实现断点续传
		BufferedOutputStream bos =new BufferedOutputStream(new FileOutputStream(file,true));
		
		byte[] buf = new byte[100];
		int count = bis.read(buf);
		
		while(count !=-1){
			bos.write(buf, 0, count);
			bos.flush();
			count = bis.read(buf);
		}
		
		//反馈
//		DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
		dos.writeUTF("文件上传成功!");
		dos.flush();
		
		bos.close();
		bis.close();
		socket.close();
		ss.close();
	}

}

// 文件名称,文件的数据
class BreakPointUploadClient{
	public static void main(String[] args) throws Exception{
		Socket socket = new Socket("127.0.0.1", 1777);
		
		File file = new File("c://77.jpg");
		
		OutputStream os = socket.getOutputStream();
		//文件的名字
		DataOutputStream dos = new DataOutputStream(os);
		dos.writeUTF(file.getName());
		dos.flush();
		
		DataInputStream dis = new DataInputStream(socket.getInputStream());
		//拿到服务器文件已有的大小
		long size = dis.readLong();
		
		
		
		//从本地读取文件数据
		BufferedInputStream bis  = new BufferedInputStream(new FileInputStream(file));
		//跳过size字节数据,读取本地文件,继续发送
		bis.skip(size);
		
		//传输文件的数据
		BufferedOutputStream bos =new BufferedOutputStream(os);
				
		byte[] buf = new byte[100];
		
		int count = bis.read(buf);
		while(count != -1){
			bos.write(buf, 0, count);
			bos.flush();
			count = bis.read(buf);
			Thread.sleep(50);
		}
		//结束输出流
		socket.shutdownOutput();
		
//		DataInputStream dis =new DataInputStream(socket.getInputStream());
		System.out.println("服务器反馈--->"+dis.readUTF());
		
		//所有流的关闭都放到最后
		bis.close();
		bos.close();
		socket.close();
	}
}
BreakPointUploadServer.java
package com.bjsxt.net;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 断点续传
 * 如果服务器文件已经存在了,考虑断点续传,如果文件不存在,传输整个文件
 * @author yhl
 *
 */
public class BreakPointUploadServer {

	public static void main(String[] args) throws Exception{
		ServerSocket ss = new ServerSocket(1777);
		
		Socket socket = ss.accept();
		
		InputStream is = socket.getInputStream();
		DataInputStream dis =new DataInputStream(is);
		String fileName = dis.readUTF();
		//本地文件是否存在
		File file = new File("c:/7/"+fileName);
		
		DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
		if(file.exists()){
			//告诉客户端,已经发送了多大的文件。
			//服务器得到文件的大小
			long size = file.length();
			dos.writeLong(size);
		}else{
			dos.writeLong(0);
		}
		dos.flush();
		//读发送过来的数据,写出到本地
		BufferedInputStream bis = new BufferedInputStream(is);
		//尾部追加数据 实现断点续传
		BufferedOutputStream bos =new BufferedOutputStream(new FileOutputStream(file,true));
		
		byte[] buf = new byte[100];
		int count = bis.read(buf);
		
		while(count !=-1){
			bos.write(buf, 0, count);
			bos.flush();
			count = bis.read(buf);
		}
		
		//反馈
//		DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
		dos.writeUTF("文件上传成功!");
		dos.flush();
		
		bos.close();
		bis.close();
		socket.close();
		ss.close();
	}

}

// 文件名称,文件的数据
class BreakPointUploadClient{
	public static void main(String[] args) throws Exception{
		Socket socket = new Socket("127.0.0.1", 1777);
		
		File file = new File("c://77.jpg");
		
		OutputStream os = socket.getOutputStream();
		//文件的名字
		DataOutputStream dos = new DataOutputStream(os);
		dos.writeUTF(file.getName());
		dos.flush();
		
		DataInputStream dis = new DataInputStream(socket.getInputStream());
		//拿到服务器文件已有的大小
		long size = dis.readLong();
		
		
		
		//从本地读取文件数据
		BufferedInputStream bis  = new BufferedInputStream(new FileInputStream(file));
		//跳过size字节数据,读取本地文件,继续发送
		bis.skip(size);
		
		//传输文件的数据
		BufferedOutputStream bos =new BufferedOutputStream(os);
				
		byte[] buf = new byte[100];
		
		int count = bis.read(buf);
		while(count != -1){
			bos.write(buf, 0, count);
			bos.flush();
			count = bis.read(buf);
			Thread.sleep(50);
		}
		//结束输出流
		socket.shutdownOutput();
		
//		DataInputStream dis =new DataInputStream(socket.getInputStream());
		System.out.println("服务器反馈--->"+dis.readUTF());
		
		//所有流的关闭都放到最后
		bis.close();
		bos.close();
		socket.close();
	}
}
网友评论