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

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);}/** * 自己要清楚,这段代码是在调度器中执行的 */@Overridepublic void execute() throws Pausable, Exception {//创建bufferScalableDirectBuf 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("", 80, false);//发送http请求ch.writeAll(buf);//接收所有响应数据,直到收到EOF,因为这里用的是HTTP1.0,所以,很快就能收到EOFint 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("===========================");//释放bufferbuf.release();//关闭连接ch.close();}}这个程序,很直观,我就不多解释了。也可以到github下载源码:

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

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

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

忍耐力较诸脑力,尤胜一筹。

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

相关文章:

你感兴趣的文章:

标签云: