码迷,mamicode.com
首页 > Web开发 > 详细

[NIO]用dawn发送接收HTTP请求

时间:2015-07-01 07:31:12      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:java   nio   异步   socket   

HTTP协议的下层使用的是tcp,所以我们建立一个tcp连接就能发送接收http请求。dawn底层使用了nio,但是经过dawn的封装之后,我们在编写代码的时候,就和使用普通的阻塞式socket一样

,不需要关注nio的api。可以把我们的精力放在业务逻辑的处理上。举例如下,下例的功能就是取回baidu首页:

package zhmt.dawn.nio;

import java.nio.charset.Charset;

import zhmt.dawn.nio.buffer.ScalableDirectBuf;
import kilim.Pausable;
import kilim.Scheduler;
import kilim.Task;

public class SimpleHttp extends Task {
	public static void main(String[] args) {
		Scheduler sch = new Scheduler();
		sch.start();

		SimpleHttp task = new SimpleHttp();
		task.startOn(sch);
	}

	/**
	 * 自己要清楚,这段代码是在调度器中执行的
	 */
	@Override
	public void execute() throws Pausable, Exception {
		//创建buffer
		ScalableDirectBuf buf = ScalableDirectBuf.allocateFromTlsCache();

		//准备http请求数据,这里是访问首页
		byte[] req = "GET / HTTP/1.0\r\n\r\n".getBytes();
		buf.wbytes(req, 0, req.length);

		//创建连接
		TcpClientChannel ch = new TcpClientChannel("www.baidu.com", 80, false);

		//发送http请求
		ch.writeAll(buf);

		//接收所有响应数据,直到收到EOF,因为这里用的是HTTP1.0,所以,很快就能收到EOF
		int n = ch.readSome(buf);
		while (n >= 0) {
			n = ch.readSome(buf);
		}

		//把结果转成字符串,并打印
		String ret = buf.rstr((int) buf.readable(), Charset.forName("utf8"));
		System.out.println("===========================");
		System.out.println(ret);
		System.out.println("===========================");

		//释放buffer
		buf.release();
		//关闭连接
		ch.close();
	}
}

这个程序,很直观,我就不多解释了。也可以到github下载源码:

https://github.com/zhmt/dawn/blob/master/examples/zhmt/dawn/nio/SimpleHttp.java


下一篇,我们写个简单的服务,一个简单的聊天室服务器。

版权声明:本文为博主原创文章,未经博主允许不得转载。

[NIO]用dawn发送接收HTTP请求

标签:java   nio   异步   socket   

原文地址:http://blog.csdn.net/zhmt/article/details/46705621

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!