「java报文建议」java发送报文

博主:adminadmin 2023-01-26 14:09:09 356

本篇文章给大家谈谈java报文建议,以及java发送报文对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java解析报文

ByteBuffer bb = ByteBuffer.wrap(data, offset, length);

if (bb.remaining() MIN_HEADER_LENGTH) {

return this;

}

this.opCode = bb.get();

this.transactionId = bb.getInt();

按照这种节奏搞吧,这个很简单的啊,拿到BYTEBUFFER以后,一点一点的处理byte。

Java Socket开发 关于报文传递和接收

看 Oracle 官方教程,同步式的 Socket 就是传统的一问一答方式,它就是你需要的。

客户端先 socket.getOutputStream().write(...); 之后到 socket.getInputStream().read(byte[]) 在循环中读取直到 read 方法返回 -1 或你期望的字节数已经全部收到了就停下来,如果不尝试停下来,后面的 read 将会阻塞等待。

基于性能改进,一般我们需要使用 NIO 异步的 socket,只需要一个线程负责通信,每个线程都有自己的出站消息队列和入站消息队列,以线程为 key 区分开,通信线程只负责把各自的消息从出站队列中发送去并把收到的消息放入入站队列中,应用程序线程就去各自的消息队列中取消息就可以了。因为每个应用线程有各自的消息队列,我们把消息放入出站队列之后就到入站队列上用同步锁等待的方法阻塞到有消息回答时为止。

关于 NIO non-blocking 非阻塞式 socket,下面有一个 NBTimeServer 例子,它讲的是服务端。客户端与此类似,

NIO 通信线程样例。

  public void run()

    {

        int tip = 0;

        try

        {

            selector = Selector.open();

            SelectionKey k = channel.register(selector, getInterestOptions());

            k.attach(thread); // 把当前线程绑定到附件中。

            this.running = true;

            statusChanged(Status.CONNECTED);

            while (this.isRunning())

            {

                // select() is a blocking operation.

                int eventCount = selector.select();

                debug("[MC.Debug] Polling TCP events ... " + eventCount);

                if (eventCount  0  channel.isOpen()  this.isRunning())

                {

                    Set keys = selector.selectedKeys();

                    for (Iterator iter = keys.iterator(); iter.hasNext(); iter.remove())

                    {

                        SelectionKey key = (SelectionKey) iter.next();

                        Thread thread = (Thread) key.attachment();

                        

                        if (!key.isValid())

                        { // channel is closing.

                            break;

                        }

                        process(key); // 处理读取消息并把消息放入 thread 对应的队列。//写出消息类似的,不过在 register 时需要注册写出允许的事件,

                        

                    }

                }

            }

        }

java中报文啥时候用呢?一直搞不懂

你可以了解一下http协议

报文就是一组客户端和服务端都认可的信息数据。可以是xml形式,json格式。等等

比如有一个android客户端向服务端发送登陆报文

user

usernamebaidu/username

password123456/password

/user

这段由客户端到服务端的xml,就可以视为一个上行报文

服务端收到报文后会返回登陆成功或者失败的信息

比如:200(成功)

404 (失败)

甚至返回更详细的失败信息等等这个由服务端到客户端的返回信息同样可以是多样性,可视为下行报文

Java按字节读取不定长报文

饿。。。。好吧

http协议里是用\r\n来做断句的,那么你可以用readline来读取 更方便些

在http协议里有个字段,叫Content-length的字段,他给出了下面http协议内容的长度,你可以按这个大小来new一个数组。

当然。。。如果没有Content-length。那搞个arraylistByte?就是Byte包装起来有点麻烦。

或者你发现不够大了 重新开的新的更大的数组 然后把剩下的复制过去 模拟一下arraylist?

java报文建议的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java发送报文、java报文建议的信息别忘了在本站进行查找喔。