[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
下一篇。我们写个简单的服务,一个简单的聊天室server。
[NIO]用dawn发送接收HTTP请求的更多相关文章
- 使用Netty进行Android与Server端通信实现文字发送接收与图片上传
ANOTHER TITLE: Let’s use netty to achieve text send and receive and image transfer to server based ...
- c#POST请求和接收post请求
c# post请求发送数据 /// <summary> /// POST请求 /// </summary> /// <param name="url" ...
- Qt5 基于TCP传输的发送/接收文件服务器(支持多客户端)
一.实现功能 1.服务器端选择待发送的文件,可以是多个 2.开启服务器,支持多客户端接入,能够实时显示每个客户端接入状态 3.等待所有客户端都处于已连接状态时,依次发送文件集给每个客户端,显示每个客户 ...
- Struts2 Action接收POST请求JSON数据及其实现解析
一.认识JSON JSON是一种轻量级.基于文本.与语言无关的数据交换格式,可以用文本格式的形式来存储或表示结构化的数据. 二.POST请求与Content-Type: application/jso ...
- Postman教程——发送第一个请求
系列文章首发平台为果冻想个人博客.果冻想,是一个原创技术文章分享网站.在这里果冻会分享他的技术心得,技术得失,技术人生.我在果冻想等待你,也希望你能和我分享你的技术得与失,期待. 前言 过年在家,闲来 ...
- [Postman]发送第一个请求(1)
通过API请求,您可以与具有要访问的API端点的服务器联系,并执行某些操作.这些操作是HTTP方法. 最常用的方法是GET,POST,PUT和DELETE.方法的名称是不言自明的.例如,GET使您可以 ...
- python使用requests发送multipart/form-data请求数据
def client_post_mutipart_formdata_requests(request_url,requestdict): #功能说明:发送以多部分表单数据格式(它要求post的消息体分 ...
- Node.js 0.12: 正确发送HTTP POST请求
Node.js 0.12: 正确发送HTTP POST请求 本文针对版本:Node.js 0.12.4 之前写过一篇Node.js发送和接收HTTP的GET请求的文章,今天再写一篇,讲发送POST的请 ...
- C# Socket模拟发送接收
Socket简介 通过TCP/IP与仪器或设备通讯,在C#语言中,我们通常采用Socket.本项目是一个简单的Socket建立服务监听与Socket作为客户端请求的一个示例. 项目结构 客户端项目 S ...
随机推荐
- 洛谷——P2590 [ZJOI2008]树的统计
https://www.luogu.org/problem/show?pid=2590#sub 题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这 ...
- hdu 1233 还是畅通project (克鲁斯卡尔裸题)
还是畅通project Time Limit: 4000/2000 MS (Java/Others) M ...
- 推断一个java文件和邮箱格式是否合法
import java.util.Scanner; public class StringTest { public static void main(String[] args) { int bac ...
- Broadcast-广播的接收
至于广播的意思,不再赘述,直接看它的使用 先看代码 package com.example.test1123; import android.annotation.SuppressLint; impo ...
- Flume的Agent
Flume的Agent text(“filename”):将文件filename作为数据源,按行发送 tail(“filename”):探测filename新产生的数据,按行发送出去 fsyslogT ...
- Python 极简教程(一)前言
现在 Python 用处很多,学的人也很多,其流行程度自不必说.但是很多人学 Python 的时候都遇到过问题,特别对于非计算机专业毕业的人来说. 现在的教程非常多,但是绝大部分对于初学者都不够友好. ...
- <link rel="shortcut icon" href="Xubuntu.ico" type="image/x-icon" /> <LINK href="Xubuntu.ico" rel="shortcut icon"> <link href="Xubuntu.ico" rel="B
<link rel="shortcut icon" href="Xubuntu.ico" type="image/x-icon" /& ...
- uva 1456(dp)
题意:有n个数字u1,u2,u3-un,每一个数字出现的概率pi = ui/(u1 + u2 + - + un),分成w组.计算期望值. 第一组例子的五个数字例如以下 30 5 10 30 25 分成 ...
- word2vec源代码解析之word2vec.c
word2vec源代码解析之word2vec.c 近期研究了一下google的开源项目word2vector,http://code.google.com/p/word2vec/. 事实上这玩意算是神 ...
- C++中引用传递与指针传递区别
C++中引用传递与指针传递区别 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程 ...