`

服务器端下载文件到客户端

    博客分类:
  • java
 
阅读更多

服务器端应用

package download;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Servlet implementation class A
 */
public class ServerServlet extends HttpServlet {
	public static int BUFFER_SIZE = 1024 * 1024;
	static Runtime get_runtime = Runtime.getRuntime();
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
		usedMemory(1);
		File file = new File("E:/toodou_work/test.csv");
		BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
		//实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。 
		ByteArrayOutputStream out = new ByteArrayOutputStream(BUFFER_SIZE);
		byte[] temp = new byte[BUFFER_SIZE];
		int size = 0;
		//读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1。
		while ((size = in.read(temp)) != -1) {
			out.write(temp, 0, size);
		}
		usedMemory(2);
		in.close();
		//Provides an output stream for sending binary data to the client.
		ServletOutputStream baos = response.getOutputStream();
		out.writeTo(baos);// byte 数组输出流的全部内容写入到指定的输出流参数中,这与使用 out.write(buf, 0, count) 调用该输出流的 write 方法效果一样。 
		out.flush();
	}
	public static void usedMemory(int i) {
		long l = get_runtime.totalMemory() - get_runtime.freeMemory();
		long k = l / 1024;
		System.out.println(i + ": " + k + " K");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
}

 

 

 

客户端应用

package download;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class SendGetRequest {
	static String sessionId = "";
	static Runtime send_runtime = Runtime.getRuntime();
	public static void main(String[] args) throws Exception {
		ServerServlet.usedMemory(3);
		URL url = new URL("http://localhost:8080/abc/ServerServlet");
		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
		//URL 连接可用于输入和/或输出。如果打算使用 URL 连接进行输入,则将 DoInput 标志设置为 true;如果不打算使用,则设置为 false。默认值为 true。
		connection.setDoOutput(true);
		// Read from the connection. Default is true.
		connection.setDoInput(true);
		// Set the post method. Default is GET
		connection.setRequestMethod("GET");
		// URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数
		connection.setInstanceFollowRedirects(false);
		// connection. Settings above must be set before connect!
		// 配置本次连接的Content-type,配置为application/x-www-form-urlencoded的
		// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode
		// 进行编码
		connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		connection.setRequestProperty("ENCTYPE", "multipart/form-data");
		// 连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,
		// 要注意的是connection.getOutputStream会隐含的进行connect。
		connection.connect();
		/*//记录发送请求时间
		Long sendTime = System.currentTimeMillis();
		DataOutputStream out = new DataOutputStream(connection.getOutputStream());
		// 要传的参数
		String content = URLEncoder.encode("sendTime", "UTF-8") + "=" + URLEncoder.encode(sendTime.toString(), "UTF-8");
		//读海量文件
		StringBuilder postStrBuf = new StringBuilder();
		for (int i = 0; i < 1; i++) {
			File file = new File("E:/toodou_work/yuliang.csv");
			BufferedReader reader = null;
			String postStr = null;
			reader = new BufferedReader(new FileReader(file));
			while ((postStr = reader.readLine()) != null) {
				postStrBuf.append(postStr);
			}
		}
		content = content + "&" + URLEncoder.encode("file", "UTF-8") + "=" + URLEncoder.encode(postStrBuf.toString(), "UTF-8");
		// DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面
		out.writeBytes(content);
		out.flush();
		out.close(); // flush and close
		*/
		//记录发送请求时间
		long start = System.currentTimeMillis();
		//Get Session ID
		String key = "";
		if (connection != null) {
			for (int i = 1; (key = connection.getHeaderFieldKey(i)) != null; i++) {
				if (key.equalsIgnoreCase("set-cookie")) {
					sessionId = connection.getHeaderField(key);
					sessionId = sessionId.substring(0, sessionId.indexOf(";"));
				}
			}
		}
		InputStream is = connection.getInputStream();
		BufferedInputStream bis = new BufferedInputStream(is);
		FileOutputStream fos = new FileOutputStream(new File("e:/1111111.txt"));
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		byte[] temp = new byte[ServerServlet.BUFFER_SIZE];
		int size = 0;
		while ((size = bis.read(temp)) != -1) {
			bos.write(temp, 0, size);
		}
		ServerServlet.usedMemory(4);
		bos.flush();//刷新此缓冲的输出流。这迫使所有缓冲的输出字节被写出到底层输出流中。
		bos.close();
		bis.close();
		//		BufferedReader br = new BufferedReader(new InputStreamReader(is));
		//
		//		String str = null;
		//		StringBuilder sb = new StringBuilder();
		//
		//		while ((str = br.readLine()) != null) {
		//			System.out.println(str);
		//		}
		//记录将从连接请求返回的数据写到文件完毕的时间
		/*long end = System.currentTimeMillis();
		System.out.println("cost time: " + (end - start) + " ms");*/
		//关闭连接
		connection.disconnect();
	}
}

 

分享到:
评论

相关推荐

    SOCKET TCP 文件传输 客户端 服务器端 client svever

    本项目"SOCKET TCP 文件传输 客户端 服务器端 client svever"就是基于TCP协议构建一个简单的文件传输系统,通过客户端与服务器端的交互来完成文件的发送和接收。 首先,我们要了解TCP的基本原理。TCP通过三次握手...

    Java基于Socket文件传输示例:服务器端和客户端

    在这个示例中,我们将探讨如何使用Java的Socket实现文件传输,包括服务器端和客户端的实现细节。 首先,我们从服务器端开始。服务器端的核心是监听特定端口(在这个例子中是8821)上的连接请求,并在接收到连接后...

    基于linux系统的文件下载服务器-客户端-服务器端.zip

    在本资源中,我们关注的是一个基于Linux系统的文件下载服务器,它包含了客户端和服务器端的实现。这样的系统设计允许用户通过客户端程序登录并选择要下载的文件,而服务器端则负责处理请求,将所需的文件传输给...

    客户端与服务器端的通信(客户端)

    客户端代码,通过Tcp协议来进行通信,内容仅做参考,接受指正

    java多人聊天室(服务器端和客户端)

    在聊天室中,服务器端需要监听客户端的连接,并通过`InputStream`读取客户端发送的信息,然后将信息广播给其他在线的客户端;客户端则通过`OutputStream`将用户输入的信息发送给服务器。 项目结构通常包括以下部分...

    文件传输服务器端与客户端

    在本示例中,我们将探讨如何使用C#编程语言构建一个文件传输服务器端与客户端系统。C#是一种强大的、面向对象的编程语言,尤其适合开发Windows平台上的应用程序,包括网络通信相关的项目。 首先,我们要了解文件...

    MFC实现FTP上传下载文件的客户端和服务器

    3. **文件传输**:FTP客户端可以通过`STOR`命令上传文件到服务器,使用`RETR`命令下载文件。MFC的`CFtpFileFind`类可以帮助查找服务器上的文件,而`CInternetFile`则用于读写文件。 4. **错误处理**:在FTP操作中,...

    服务器向客户端传送文件之客户端

    在 Uinx/Linux/Windows 环境下通过 socket 方式实现一个基于 Client/Server 模式的文件传输程序

    svn 服务器端 客户端

    以下是对“svn服务器端和客户端安装工具”的详细解析: 1. **SVN服务器端**: SVN服务器端是整个版本控制系统的核心,它存储项目的所有历史版本和当前状态。常见的SVN服务器端软件有Apache Subversion(也称为...

    VC++实现客户端与服务器端的文件传输(TFTP方式)-带窗口

    本文将深入探讨如何使用VC++实现基于TFTP方式的客户端与服务器端文件传输,并结合提供的压缩包文件进行解析。 首先,TFTP协议本身相当简单,它支持两种操作模式:读(Read)和写(Write)。协议基于UDP(User ...

    delphi客户端文件上传代码和服务器端php接收代码

    5. **错误处理**:无论是客户端还是服务器端,都需要处理可能出现的错误,如网络问题、文件过大、文件类型不允许等。客户端应显示相关的错误信息,而服务器端可以通过HTTP状态码和自定义响应体向客户端反馈错误。 6...

    socket通信,客户端向服务器传文件

    在IT领域,Socket通信是一种基于TCP/IP协议族的...客户端通过建立Socket连接,读取文件内容并写入Socket的输出流,而服务器端则接收这些数据并保存到本地。这个过程涉及到了网络编程、文件I/O和流操作等多个知识点。

    服务器端和客户端五子棋

    在【TicTacToe2】这个文件中,我们可以推测这是游戏的源代码,可能包含了服务器端和客户端的主要类和方法。其中,TicTacToe可能表示五子棋游戏的基本逻辑,如棋盘状态的表示、游戏规则的判断等;而2可能表示游戏支持...

    类qq聊天客户端,服务器端

    11203070313_李佳明_客户端和11203070313_李佳明_服务器端这两个文件或文件夹可能分别包含了客户端和服务器端的源代码。客户端的代码可能包含网络通信模块(如使用TCP/IP协议)、UI界面的实现(如Windows Forms或WPF...

    C# 文件传输客户端和服务器端

    本项目涉及的是使用C#编程语言实现文件传输的客户端和服务器端程序。C#是微软开发的一种面向对象的编程语言,它具有丰富的库支持,使得网络通信和文件操作变得简单。以下是关于这个项目的一些关键知识点: 1. **套...

    web服务器端调用客户端可执行文件

    在IT领域,尤其是在Web开发中,"web服务器端调用客户端可执行文件"是一个涉及到多个技术栈的概念。这个过程通常涉及到服务器与客户端之间的交互,利用JavaScript、PHP等技术来实现。下面将详细解释这一主题。 首先...

    C#文件传输(客户端、服务器端) 源代码

    在文件传输应用中,客户端会创建一个Socket实例,连接到服务器端的指定IP地址和端口号。一旦连接建立,双方可以通过Socket的Send和Receive方法交换数据。 在"SendFiles.zip"中,可能包含的是服务器端的源代码。...

    Java Socket PC端传输文件简易服务器客户端

    客户端通过Socket的输出流将文件内容写入网络,服务器端则通过输入流接收这些数据。 5. **多线程处理**: - 为了处理多个并发的客户端连接,服务器端可能需要使用多线程。每个新连接的客户端都会启动一个新的线程...

    WebSocket服务器端+Html5客户端

    这个压缩包文件包含的资源很可能是用于创建WebSocket服务器端和HTML5客户端的示例或框架。 WebSocket协议是在2011年被IETF(互联网工程任务组)标准化的,它的设计目标是提供一种让Web应用可以直接与服务器进行全...

    MFC socket编程,网络传输(服务器端,客户端)

    用socket套接字实现了文件传输,尤其适用于初学者学习socket进行创建,绑定,监听,接收等过程,服务器端和客户端进行通信的整个流程,MFC界面简单。发送端有,create ,listen,accept,send等函数;接收端有create...

Global site tag (gtag.js) - Google Analytics