[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);
	}

	/**
	 * 自己要清楚,这段代码是在调度器中执行的
	 */
	@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

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

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

时间: 2024-08-10 12:03:36

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

一篇文章贯穿ACE各种发送接收组件

通信过程 首先介绍一下socket通信的基本过程:这里先假设有两个家伙在通信,一个是S,另一个叫C (1)S打开端口监听本地的端口看看有没有人来连接: (2)与此同时C试图去连接远程的S,连接的地址就是S的地址加上S监听的端口号: (3)S收到C的请求之后,建立连接,双方共同持有连接的通道,可互相发送/接收数据任意次,此时S和C无区别: (4)其中一方断开连接,或者因为网络原因中断连接,另一方也会关闭: (5)此时通信过程结束: 整个过程如下图所示 普通的ACE通信类完成上面的通信过程: Tim

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

一.认识JSON JSON是一种轻量级.基于文本.与语言无关的数据交换格式,可以用文本格式的形式来存储或表示结构化的数据. 二.POST请求与Content-Type: application/json 常用的HTTP请求方法有GET, POST, PUT, DELETE等.在提交POST请求时,请求数据放在消息体(Body)中,请求数据的格式及编码方式用Content-Type来指定.如我们常用的表单<form>提交,其Content-Type默认为application/x-www-for

C# ---串口发送接收数据实例

硬件设备: pH/ORP 电导率/TDS/盐度 溶解氧 2000/3000/5000/5500 变送器/控制器 设定: P-08:RS-485输出设定 P-11:485传输设定 设定这俩种的ID号 根据ID,对串口发送请求:接收串口返回的数据. C# ---串口发送接收数据实例

PHP-Socket服务端客户端发送接收通信实例详解

Socket介绍 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务. Socket连接过程 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认.

一篇文章贯穿ACE各种发送接收组件 1.2版

TCP通信过程介绍 首先介绍一下socket通信的基本过程:这里先如果有两个家伙在通信,一个是S.还有一个叫C (1)S打开port监听本地的port看看有没有人来连接: (2)与此同一时候C试图去连接远程的S.连接的地址就是S的地址加上S监听的port号: (3)S收到C的请求之后,建立连接,两方共同持有连接的通道.可互相发送/接收数据随意次.此时S和C无差别. (4)当中一方断开连接,或者由于网络原因中断连接,还有一方也会关闭: (5)此时通信过程结束: 整个步骤例如以下图所看到的 普通AC

HP发送HTTP POST请求 返回结果

HP发送HTTP POST请求 返回结果 <?php $srv_ip = '192.168.10.188';//你的目标服务地址或频道.$srv_port = 80;$url = '/demo/test_query_string.php'; //接收你post的URL具体地址 $fp = '';$resp_str = '';$errno = 0;$errstr = '';$timeout = 10;$post_str = "username=demo&str=aaaa";

http协议发送json字符串请求

package post; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; public class DoTest { /** * 请求连接固定参数 * @param s 传参地址 */ public

JAVA发送http post 请求、get请求

1.写一个HttpRequestUtils工具类,包括post请求和get请求 import net.sf.json.JSONObject; import org.apache.commons.httpclient.HttpStatus; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost

Webpack运行后,XMLHttpRequest发送带参请求,后台$_POST没有数据

环境: 打包工具: Webpack: 整合软件包: WAMP: 编辑器:VsCode: Webpack虚拟出的端口号是8080,本地Apache的端口号是80 问题重现: JS代码,使用FormData对象作为传输数据的格式: function postData() { var formData = new FormData(); formData.append("data", JSON.stringify({name:'xxx', age:20})); function xhrReq