![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Socket&Netty
Bwz_Learning
Change the world by program.
展开
-
传统Socket编程的回顾(一)
1、服务端import java.net.ServerSocket;import java.net.Socket;public class Server { final static int PROT = 8765; public static void main(String[] args) { ServerSocket server = null; try {原创 2016-12-09 19:01:59 · 533 阅读 · 0 评论 -
Netty之TCP粘包拆包问题
粘包拆包问题是处于网络比较底层的问题,在数据链路层、网络层以及传输层都有可能发生。我们日常的网络应用开发大都在传输层进行,由于UDP有消息保护边界,不会发生这个问题,因此这篇文章只讨论发生在传输层的TCP粘包拆包问题。什么是粘包、拆包?对于什么是粘包、拆包问题,我想先举两个简单的应用场景:客户端和服务器建立一个连接,客户端发送一条消息,客户端关闭与服务端的连接。转载 2016-12-15 22:43:06 · 483 阅读 · 0 评论 -
Netty之解决TCP粘包拆包(设置定长消息)
1、什么是粘包/拆包 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。2、解原创 2016-12-15 23:13:18 · 9962 阅读 · 0 评论 -
Netty之解决TCP粘包拆包(设置消息边界)
1、什么是粘包/拆包 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。2原创 2016-12-16 13:15:11 · 4396 阅读 · 0 评论 -
Netty之解决TCP粘包拆包(自定义协议)
1、什么是粘包/拆包 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。2原创 2016-12-16 13:35:40 · 31300 阅读 · 15 评论 -
Netty之源码下载
1、源码下载 前面,讲到的Netty系列的源码下载。下载地址原创 2016-12-16 21:12:23 · 3616 阅读 · 0 评论 -
Netty之实现自定义简单的编解码器一(MessageToByteEncoder<Integer>和ByteToMessageDecoder)
1、关于自定义编码器的简介 在这里实现的编解码器很简单。编码器的功能实现的是,int--->byets的编码;解码器实现的是,bytes--->int的解码。2、编码器的实现import io.netty.buffer.ByteBuf;import io.netty.channel.ChannelHandlerContext;import io.netty.handler原创 2016-12-14 20:33:59 · 16984 阅读 · 0 评论 -
Netty之实现自定义简单的编解码器二(MessageToMessageEncoder<CharSequence>和MessageToMessageDecoder<ByteBuf>)
1、对于MessageToMessageEncoder的理解 MessageToMessageEncoder编码器,这里的第二个Message可以理解为任意一个对象。如果是使用ByteBuf对象的话,就和之前的MessageToByte的原理是一样的了。所以要在MessageToMessageDecoder的解码器里面,手动的指定,是对ByteBuf类型的对象进行解码的操作原创 2016-12-14 21:46:41 · 8935 阅读 · 0 评论 -
Netty之传输POJO(使用Java自带的序列化方式)
1、使用Netty传输POJO对象,重点在于对象的序列化。序列化的对象通过TCP进行网络传输,结合Netty提供的对象编解码器,可以做到远程传输对象。首先Java需要序列化的对象,需要实现java.io.Serializable接口.2、工程目录 2.1 项目的目录结构 2.2 关于Request和Response的讲解原创 2016-12-15 17:02:50 · 7934 阅读 · 2 评论 -
Netty之文件传输
1、工程的目录结构 2、GZIP进行压缩和解压的工具类import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;impo原创 2016-12-15 22:36:05 · 12134 阅读 · 3 评论 -
Netty之Codec的Decoders和Encoders概述
Netty之Codec的Decoders和Encoders概述 A codec is made up of two parts: Decoder Encoder This should make it clear that the decoder is for inbound and the encoder is for ou转载 2016-12-14 19:51:43 · 1135 阅读 · 0 评论 -
传统Socket编程的回顾(二)
在服务端,加入线程池。1、自定义线程池import java.util.concurrent.ExecutorService;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUni原创 2016-12-09 19:24:07 · 388 阅读 · 0 评论 -
传统Socket编程传递POJO(使用JSON的方式)
1、JSON序列化的工具类import com.google.gson.Gson;public class GSONUtils { /** * 将给定的对象转换为Json * * @param src * @return */ public static String toJson(Object src) { Gson gson = new Gson();原创 2016-12-09 21:01:20 · 1266 阅读 · 0 评论 -
传统Socket编程传递POJO(使用Java自带的序列化方式)
1、Java序列化的工具类import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.i原创 2016-12-14 18:58:53 · 1007 阅读 · 0 评论 -
Java NIO
1.Java NIO 由以下几个核心部分组成: ChannelsBuffersSelectors虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。转载 2016-12-14 19:09:12 · 306 阅读 · 0 评论 -
Java NIO 中 ServerSocketChannel和SocketChannel
1、服务端代码[java] view plain copy print?import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.ClosedChann原创 2016-12-14 19:10:49 · 782 阅读 · 0 评论 -
Netty之HelloWorld
1、关于Netty编程常用类的介绍 BootStrap和ServerBootstrap类似,不过他是对非服务端的channel而言,比如客户端。 如果你只指定了一个EventLoopGroup那他就会即作为一个‘boss’线程,也会作为一个‘workder’线程,尽管客户端不需要使用到‘boss’线程。 代替NioServerSock原创 2016-12-14 19:30:37 · 424 阅读 · 0 评论 -
Netty之传输POJO(使用JBoss的Marshalling序列化方式)
1、关于JBOSS的Marshalling的简介 JBoss Marshalling 是一个Java对象的序列化API包,修正了JDK自带的序列化包的很多问题,但又保持跟 java.io.Serializable 接口的兼容;同时增加了一些可调的参数和附加的特性,而这些参数和特性可通过工厂类进行配置。2、关于JBoss的Marshalling的配置 2.1原创 2016-12-15 17:21:13 · 5130 阅读 · 4 评论