参考资料: https://huoding.com/2016/01/19/488 示例代码: https://github.com/gordonklg/study,socket module A. CLOSE_WAIT 有时会出现服务器响应极慢.假死的现象,查看 netstat 会发现服务器上存在大量未关闭的 CLOSE_WAIT 状态连接.我们分析下原因. 首先,CLOSE_WAIT 是被动关闭方才会出现的状态.我们模拟一个场景,客户端建立大量 Socket 连接,同时为每个 Socket 设…
A. A轮目标 复习网络编程基础知识,重点学习下TCP三次握手四次挥手,以及可能引发的异常情况. 回顾 Socket 编程,好多年没写(chao)过相关代码了. 重学 NIO,以前学的基本忘光了,毕竟从来没在项目中用过. 学习 Netty,了解基本用法,写一个简单项目练手. 扫读 Netty 核心源码,了解其线程模型,重点学习 Netty 如何使用 NIO. 搜罗面试题,查漏补缺. B. 基础知识 参考资料:<Java网络编程 第四版> 网际层(internet layer): 定义了数据位和…
参考资料: 老外写的教程,很适合入门:http://tutorials.jenkov.com/java-nio/index.html 上面教程的译文:http://ifeve.com/overview/ 示例代码: https://github.com/gordonklg/study,socket module A. 摘要 因为有现成的教程,本文只做摘要. NIO 有三宝,channel.buffer.selector Channel 与 Stream 很相似,除了: Channel 同时支持读…
参考资料: 了解 Java NIO 的 Reactor 模型,大神 Doug Lea 的 PPT Scalable IO in Java 必看:http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf 示例代码: https://github.com/gordonklg/study,socket module A. 单线程版 Reactor 相当于一个中央事件收集分发器.一方面,Reactor 通过 Selector 可以收到已经准备完毕的事件通知,另一方面,R…
参考资料: http://www.jellythink.com/archives/705 示例代码: https://github.com/gordonklg/study,socket module A. TCP 四次挥手 下图描述了 TCP 整个生命周期从建立连接到断开连接的逻辑: 下面的测试代码完美模拟了上图 gordon.study.socket.basic.wireshark.TcpLifecycle.java public class TcpLifecycle { @SuppressW…
示例代码: https://github.com/gordonklg/study,socket module A. LineSeparate 基于 Buffer 实现逐行读取的 EchoServer 比传统 Socket 编程困难,相当于需要自己通过 Buffer 实现 BufferedReader 的 readLine 功能. 代码如下,假设单行不超过256字节,支持 Win 和 Linux(不支持单 \r 作为换行符)系统,空行忽略. 代码就不分析了,写了好久才跑对测试,分包粘包真是麻烦,要…
示例代码: https://github.com/gordonklg/study,socket module A. Socket 编程简单例子 最简单的 Socket 编程是通过回车/换行符,整行读取字符串.网上代码随便抄抄便是. gordon.study.socket.basic.LineSeparateEchoServer.java 代码略 B. 简单的自定义协议 对于传输内容包含回车/换行符的通讯需求,可以使用自定义协议. 此处演示一个很简单的协议: 第一个字节代表类型,1表示为文本,0表…
参考资料: https://huoding.com/2013/11/21/299 https://hpbn.co/building-blocks-of-tcp/#three-way-handshake 示例代码: https://github.com/gordonklg/study,socket module A. Wireshark 免费抓包工具,谁用谁知道. 根据端口过滤 frame 的方法:tcp.port==8888 默认安装的 Winpcap 不能对 localhost 抓包,建议安装…
新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程小例子 [3]   UDP编程小例子 [4]  简单线程池实例 一.网络编程的主要认识 Java是一种基于网络设计的语言,用于开发网络软件特别便利. 它对于网络的操作都是基于IP层以上的,也就是对TCP/UDP进行操作,所以java的网络编程又称为Socket编程. 一种是TCP/IP 网络编程,…
Java网络编程,我们先来看下面这一张图: 由图可得:想要进行网络编程,首先是服务器端通过ServerSocket对某一个端口进行监听.通过accept来判断是否有客户端与其相连.若成功连上,则通过readline和println函数来进行数据的发送和接收.实现网络编程. 示例如下: 服务器端代码: /* * 功能:演示Java网络编程的服务器端 * author:ywq */ import java.io.*; import java.net.*; public class TestServe…