Http Post 二进制通信

客户端请求和接收(使用了httpclient4.3 和netty3.5)

public static void httpPost11() {
    CloseableHttpClient httpClient = HttpClients.createDefault();
    HttpPost httpPost = new HttpPost(
            "http://192.168.1.74:4321/v1/user/get_notice");
    MultipartEntityBuilder d=MultipartEntityBuilder.create();
    int a=10,b=11;
    d.addBinaryBody("id", HighLowByteConvert.toHH(a));
    d.addBinaryBody("ids", HighLowByteConvert.toHH(b));
    try {
        httpPost.setEntity(d.build());
        CloseableHttpResponse httppHttpResponse2 = httpClient
                .execute(httpPost);
        if (httppHttpResponse2.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            byte []c=EntityUtils.toByteArray(httppHttpResponse2.getEntity());
            ChannelBuffer channelBuffer = ChannelBuffers.copiedBuffer(c);
            System.out.println(channelBuffer.readInt());
            System.out.println(channelBuffer.readInt());
        }
        else
        {
        }
        httppHttpResponse2.close();
        httpClient.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

服务端接收和发送

public void handle(HttpRequest request, Channel channel) throws Exception {

        HttpMethod method = request.getMethod();
        if(method.equals(HttpMethod.GET)){
            handle(request.getUri(), channel);
        }else if(method.equals(HttpMethod.POST)){
             HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(new DefaultHttpDataFactory(false), request);
             List< InterfaceHttpData> datas = decoder.getBodyHttpDatas();
             for (InterfaceHttpData interfaceHttpData : datas) {
                 if(interfaceHttpData.getHttpDataType() == HttpDataType.Attribute)
                 {
                     Attribute attribute = (Attribute) interfaceHttpData;
                     System.out.println("id :" +   attribute.getChannelBuffer().readInt());
                 }
            }
             sendResponse("", channel);
        }
    }
protected void sendResponse(String contextString, Channel channel){

        HttpResponse response = new DefaultHttpResponse(HTTP_1_1, HttpResponseStatus.OK);
        ChannelBuffer channelBuffer = ChannelBuffers.dynamicBuffer();
        channelBuffer.writeInt(1);
        channelBuffer.writeInt(2);
        response.setContent(channelBuffer);
        response.setHeader(CONTENT_TYPE, "text/plain; charset=UTF-8"); //application/octet-stream 也可以
        channel.write(response).addListener(ChannelFutureListener.CLOSE);
    }

Http Post 二进制通信,布布扣,bubuko.com

时间: 2024-10-07 05:25:21

Http Post 二进制通信的相关文章

轻量级通信引擎StriveEngine —— C/S通信demo(2) —— 使用二进制协议 (附源码)

在网络上,交互的双方基于TCP或UDP进行通信,通信协议的格式通常分为两类:文本消息.二进制消息. 文本协议相对简单,通常使用一个特殊的标记符作为一个消息的结束. 二进制协议,通常是由消息头(Header)和消息体(Body)构成的,消息头的长度固定,而且,通过解析消息头,可以知道消息体的长度.如此,我们便可以从网络流中解析出一个个完整的二进制消息. 两种类型的协议格式各有优劣:文本协议直观.容易理解,但是在文本消息中很难嵌入二进制数据,比如嵌入一张图片:而二进制协议的优缺点刚刚相反. 在 轻量

HTML5 WebSocket:下一次Web通信革命揭幕

让我们一起来了解HTML 5对当前Web通信的改变.HTML 5 Web Socket通过在Web上的一个单一Socket定义了一个全双工通信信道为Web通信带来了显著的改善. [51CTO译文]关于HTML 5的各种前沿技术应用51CTO已经报道过很多,比如HTML 5的视频音频元素.HTML 5 Web SQL Database.HTML5 File API以及如何从零开始构建一个HTML 5页面等等.这些都是HTML 5对当前Web开发标准技术的升级或扩展.今天,51CTO带您了解HTML

二进制数组

前面的话 二进制数组(ArrayBuffer对象.TypedArray视图和DataView视图)是javascript操作二进制数据的一个接口.这些对象早就存在,属于独立的规格(2011年2月发布),ES6将它们纳入了ECMAScript规格,并且增加了新的方法.本文将详细介绍二进制数组 引入 二进制数组的原始设计目的,与WebGL项目有关.所谓WebGL,就是指浏览器与显卡之间的通信接口,为了满足javascript与显卡之间大量的.实时的数据交换,它们之间的数据通信必须是二进制的,而不能是

es6二进制数组--基础

一.概念二进制数组由 ArrayBuffer对象 TypeArray 视图和DataView视图 三部分组成是javascript操作二进制数据的一个接口. 早在2011年2月就已经发布,但是由于ES6 的出现,将这些对象添加了一些新的方法.它是一种类似C语言中直接操作字节的机制. 产生背景这个接口的原始设计目的,与WebGL项目有关.所谓WebGL,就是指浏览器与显卡之间的通信接口,为了满足JavaScript与显卡之间大量的.实时的数据交换,它们之间的数据通信必须是二进制的,而不能是传统的文

轻量级通信引擎StriveEngine —— C/S通信demo(附源码)

前段时间,有几个研究ESFramework的朋友对我说,ESFramework有点庞大,对于他们目前的项目来说有点"杀鸡用牛刀"的意思,因为他们的项目不需要文件传送.不需要P2P.不存在好友关系.也不存在组广播.不需要服务器均衡.不需要跨服务器通信.甚至都不需要使用UserID,只要客户端能与服务端进行简单的稳定高效的通信就可以了.于是,他们建议我,整一个轻量级的通信组件来满足类似他们这种项目的需求.我觉得这个建议是有道理的,于是,花了几天时间,我将ESFramework的内核抽离出来

Ehcache和MemCached比较分析

项目  Memcache Ehcache 分布式  不完全,集群默认不实现  支持  集群  可通过客户端实现  支持(默认是异步同步)  持久化  可通过第三方应用实现,如sina研发的memcachedb,将cache的数据保存到[url=]Berkerly DB[/url] 支持.持久化到本地硬盘,生成一个.data和.index文件.cache初始化时会自动查找这两个文件,将数据放入cache 效率  高  高于Memcache 容灾  可通过客户端实现.  支持  缓存数据方式  缓存

C#语言基础原理及优缺点

一.原理: C#是专门为.net程序框架而创造的语言. .net框架有ms的.netFramework:Mono的.NetFramework(也是符合.net IL语言,CTS规范,CLS规范, CLR运行时库),mono程序可以运行在各种操作系统和游戏平台中运行(目前mono还不够成熟影响力较小). .net原理主要是编译的原理: IL中间语言, CLR运行时环境. .net程序组成体系主要概念:应用程序集,应用程序域. .net程序编译过程: 1)编译时:.netvs或mono编译器(或其它

Ehcache与Memcache的区别

ehcache是纯java编写的,通信是通过RMI方式,适用于基于java技术的项目. memcached服务器端是c编写的,客户端有多个语言的实现,如c,php(淘宝,sina等各大门户网站),python(豆瓣网), java(Xmemcached,spymemcached).memcached服务器端是使用文本或者二进制通信的. 项目 Memcache Ehcache 分布式 不完全,集群默认不实现 支持 集群 可通过客户端实现 支持(默认是异步同步) 持久化 可通过第三方应用实现,如si

Ehcache和MemCached区别及应用

ehcache是纯java编写的,通信是通过RMI方式,适用于基于java技术的项目. memcached服务器端是c编写的,客户端有多个语言的实现,如c,php(淘宝,sina等各大门户网站),python(豆瓣网), java(Xmemcached,spymemcached).memcached服务器端是使用文本或者二进制通信的. 项目 Memcache Ehcache 分布式 不完全,集群默认不实现 支持 集群 可通过客户端实现 支持(默认是异步同步) 持久化 可通过第三方应用实现,如si