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

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

[NIO]用dawn发送接收HTTP请求的更多相关文章

  1. 使用Netty进行Android与Server端通信实现文字发送接收与图片上传

    ANOTHER TITLE: Let’s use netty to achieve text send and receive and  image transfer to server based ...

  2. c#POST请求和接收post请求

    c# post请求发送数据 /// <summary> /// POST请求 /// </summary> /// <param name="url" ...

  3. Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)

    一.实现功能 1.服务器端选择待发送的文件,可以是多个 2.开启服务器,支持多客户端接入,能够实时显示每个客户端接入状态 3.等待所有客户端都处于已连接状态时,依次发送文件集给每个客户端,显示每个客户 ...

  4. Struts2 Action接收POST请求JSON数据及其实现解析

    一.认识JSON JSON是一种轻量级.基于文本.与语言无关的数据交换格式,可以用文本格式的形式来存储或表示结构化的数据. 二.POST请求与Content-Type: application/jso ...

  5. Postman教程——发送第一个请求

    系列文章首发平台为果冻想个人博客.果冻想,是一个原创技术文章分享网站.在这里果冻会分享他的技术心得,技术得失,技术人生.我在果冻想等待你,也希望你能和我分享你的技术得与失,期待. 前言 过年在家,闲来 ...

  6. [Postman]发送第一个请求(1)

    通过API请求,您可以与具有要访问的API端点的服务器联系,并执行某些操作.这些操作是HTTP方法. 最常用的方法是GET,POST,PUT和DELETE.方法的名称是不言自明的.例如,GET使您可以 ...

  7. python使用requests发送multipart/form-data请求数据

    def client_post_mutipart_formdata_requests(request_url,requestdict): #功能说明:发送以多部分表单数据格式(它要求post的消息体分 ...

  8. Node.js 0.12: 正确发送HTTP POST请求

    Node.js 0.12: 正确发送HTTP POST请求 本文针对版本:Node.js 0.12.4 之前写过一篇Node.js发送和接收HTTP的GET请求的文章,今天再写一篇,讲发送POST的请 ...

  9. C# Socket模拟发送接收

    Socket简介 通过TCP/IP与仪器或设备通讯,在C#语言中,我们通常采用Socket.本项目是一个简单的Socket建立服务监听与Socket作为客户端请求的一个示例. 项目结构 客户端项目 S ...

随机推荐

  1. VMware Vsphere 6.0安装部署 vCenter Server安装

    几个不同的组件 vCenter Server:对ESXi主机进行集中管理的服务器端软件,安装在windows server 2008R2或以上的操作系统里,通过SQL 2008R2 或以上版本的数据库 ...

  2. Exclusive or

    题目连接 题意: 每次给一个n.求 (2≤n<10500) 分析: 先说一下自己的想法,假设将n换成二进制数,也就一两千位左右,那么一位一位处理是能够接受的. 将0-n写成二进制形式后,显然全部 ...

  3. mysql 压力测试之批量插入自增字段不连续问题

    Gaps in auto-increment values for “bulk inserts” With innodb_autoinc_lock_mode set to 0 (“traditiona ...

  4. tab标签页(选项卡)插件

    <body style="margin: 50px;"> <ul id="nav" class="nav nav-tabs" ...

  5. TrueSec引导的Linux系统和安全检测工具预览

      650) this.width=650;" onclick='window.open("http://blog.51cto.com/viewpic.php?refimg=&qu ...

  6. 事件循环(Event Loop)

    1.什么是事件循环? JavaScript为单线程执行的,所以是从上到下依次执行,js分为两个任务,宏任务和微任务 首先执行宏任务(第一次就是执行所有的同步代码),再执行所有的微任务,执行完毕之后再次 ...

  7. CODEVS——T1519 过路费

    http://codevs.cn/problem/1519/ 时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Desc ...

  8. 常见c#正则表达式类学习整理

    1.MatchCollection类 用于输入字符串所找到的成功匹配的集合,Regex.Matches 方法返回 MatchCollection 对象 用法 //str:要搜索匹配项的字符串 patt ...

  9. 将一个字符串当做一个方法名或对象的key

    var func = "test" // 方法 [func](){ console.log("test===>") } //调用 test() //打印 ...

  10. 1.1selenium 介绍

    1.1selenium 介绍selenium 是一个 web 的自动化测试工具,不少学习功能自动化的同学开始首选 selenium , 相因为它相比 QTP 有诸多有点:* 免费,也不用再为破解 QT ...