tomcat接收流数据

我靠!都好久没写过博客了,不是没有需要记录的,而是太TMD忙啦!!!不过,就算忙也应该记录下重要的东西的,要不就成了瞎忙了,在此,先检讨一下!
[b][color=red]我决定,从今天开始,每天晚上拿出1~2个小时左右的时间来总结、学习、提高![/color] [/b]
最近客户有个需求,他们的客户端需要用C给Tomcat发送流数据,然后再经过处理后给他返回流数据,这个需求提出后,我首先想到的就是上传和下载的机制,那个应该就是流数据的传输,不过由于以前没有深入接触过上传下载,就是用也是用一些已经封装好的包,按照既定的模式做一些简单的上传下载,对于“底层”的东西不是很了解,或者说是根本不了解,不过好在俺的分析问题解决问题的能力还是不错的(哈,小吹一下),我先从网上找了了一个比较原始的接收上传文件的代码,部署到Tomcat后,正常用IE上传一个文件,在客户端抓报文,看了一下报文的结构,发现流数据是附加到报文体的, 然后就让客户端按照该格式给我发报文,经过反复调试,终于成功了!!!哈
其实就是将HTTP报文的头里的ContentType设置为multipart/form-data的,然后直接将2进制数据附加在报文体(报文头和报文体是用连续的两个\r\n来分割的)中就OK了,然后通过request.getInputStream()就可以得到数据。
返回流数据就是用下载的流程,将response.setContentType("application/x-download"),然后直接OutputStream out = response.getOutputStream();out.write(bos.toByteArray()) 就OK了。 下面附上简单的源码:

import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Test extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
InputStream in = request.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
BufferedInputStream bis = new BufferedInputStream(in);
readStreamLine(bis, bos);
response.reset();
response.setContentType("application/x-download");
OutputStream out = response.getOutputStream();
out.write(bos.toByteArray());
out.flush();
out.close();
}

private ByteArrayOutputStream readStreamLine(BufferedInputStream in,
ByteArrayOutputStream bos) throws IOException {
int b = in.read();
while (b != -1) {
bos.write(b);
b = in.read();
}
return bos;
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值