![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java网络编程
文章平均质量分 94
Java网络编程
码拉松
这个作者很懒,什么都没留下…
展开
-
详细分析Java socket系统调用过程
本文将会在Linux环境中让服务端与客户端通过BIO的网络模型进行通信,并且演示整个通信细节。命令介绍在分之前会先介绍几个命令,并说明在本次分析中的作用。1、lsof -p pid我们用losf命令主要是为了查看系统为某个进程分配的文件描述符的信息。-p:列出指定进程号所打开的文件。2、netstat -natp显示协议统计信息和当前 TCP/IP网络连接。-n:以数字形式显示地址和端口号。-a:显示所有连接和监听端口。-t:显示TCP传输协议的连线状况。-p:显示正在使用Socket原创 2021-01-28 17:25:34 · 683 阅读 · 6 评论 -
TCP四次分手过程详解与案例演示
什么是TCP四次分手?服务端和客户端建立TCP连接时需要三次握手,而断开时,服务端和客户端一共需要发送4次数据包才能真正完成一次TCP连接的断开。四次分手的过程1、某个应用进程首先调用close,我们称为这一端执行主动关闭(active close)。这一端的TCP于是发送一个FIN分节,表示数据发送完毕。2、接收到FIN的另一端执行被动关闭,这个FIN由TCP确认,它的接收也作为文件结束符传递给接收方应用进程(放在已排队等候该应用进程接收的任何其他数据之后),因为FIN的接收意味着应用进程在相应连原创 2020-12-14 21:16:17 · 2569 阅读 · 0 评论 -
Netty中Buffer的基本使用
Netty中Buffer的基本使用原创 2020-12-14 14:39:37 · 698 阅读 · 1 评论 -
Java网络编程中使用epoll多路复用底层调用详解
Java NIO包中提供了channel、buffer、selector等多个组件,通过他们提供的API可以实现多路复用的I/O模型,本文通过实现一个简单的使用多路复用的服务端程序,来演示JavaAPI中提供的方法与底层epoll函数实现的具体关系。服务端代码,标准的demo案例,程序运行后服务端启动并绑定9090端口,等待客户端连接,读取到客户端消息后再直接把消息后回复给客户端。import java.io.IOException;import java.net.InetSocketAddress原创 2020-10-31 11:52:11 · 2451 阅读 · 0 评论 -
JDK NIO包中Buffer基本使用
Buffer(缓冲区)在JDK NIO的模型中,所有的I/O都要缓冲,不再向输出流写入数据和从输入流读取数据,而是要从缓冲区中读写数据,像在缓冲流中一样,缓冲区可能就是字节数组。Java的所有基本数据类型都有特定的Buffer子类:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer。不过在网络编程中几乎只会使用ByteBuffer。Buffer的结构位置(position)缓冲区中将读取或者原创 2020-10-30 22:24:32 · 276 阅读 · 0 评论 -
TCP三次握手过程详解与案例演示
什么是TCP三次握手?所谓的“三次握手”:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。简单来理解就是因为建立的是虚拟连接,所以为了确保客户端和服务端之间的通信而进行的一系列互相确认的过程。分别是哪三次握手?第一次握手建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。SYN_原创 2020-10-28 14:24:41 · 2693 阅读 · 2 评论 -
多路复用中的select和epoll对比分析
什么是多路复用?简单的理解就是在单线程下可以实现同时监控多个socket文件是否有IO事件到达的能力。为什么要用多路复用?要理解这个问题首先要先来复习一个BIO和NIO这两种网络模型。BIOBIO称为同步阻塞模型,也就是一个线程只能监控一个socket,并且在有IO事件到达前不能做其他任何事情,线程会一直处于阻塞状态。调用accpet后,如果没有客户端连接,代码就会一直阻塞在这一行,直到有连接到达。Socket client = server.accept()读取数据时也一样,即使客户端原创 2020-10-22 15:45:33 · 285 阅读 · 0 评论 -
一个生活中的小场景告诉你什么是IO模型中的同步、异步、阻塞、非阻塞
在IO网络模型中大致可以分为,同步阻塞、同步非阻塞、异常非阻塞这三种类型,有些人可能对同步和阻塞这两个概念容易混淆。同步阻塞同步阻塞指的是用户的请求操作会引起进程的阻塞,直到IO完成。举一个现实中的小场景:饭店烧菜。在同步阻塞这种场景下,假如有10个客户点了10份砂锅,那么厨师只能站在砂锅旁烧一份等一份,期间不能做任何其他事情。假如你使用多线程的方式,那也就相当于,厨师给每份砂锅都安排了一个徒弟专门看管,但看管期间小弟除了等砂锅烧开,也不能做其他任何事情。10份砂锅:10个客户端请求。厨师原创 2020-10-21 15:43:20 · 955 阅读 · 0 评论 -
JavaNIO基本使用以及性能问题分析
什么是NIO?NIO在操作系统当前一般定义为:non-blocking io,JDK1.4开始新引入了NIO相关的类库,所以有时候人们在Java中有叫他:new io。当你使用NIO请求时,等待客户端请求,或者等待数据的到达都不会阻塞了,而是直接返回给你一个错误信息。简单来说就是如果socket标记为阻塞,那么accept调用就会阻塞,直接有连接到达,如果socket标记为非阻塞,并且也没有连接到达,那么就会返回一个EAGAIN或EWOULDBLOCK类型的错误。代码演示服务端代码impo原创 2020-10-21 11:21:14 · 321 阅读 · 0 评论 -
JavaBIO基本使用以及阻塞问题分析
简单认识BIOBIO在网络编程中指的是同步阻塞的网络模型(Blocking IO),Java中BIO一般就是我们使用java.io包下提供的一些用来实现网络编程的方法。单线程代码演示服务端import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;public cl原创 2020-10-19 15:09:01 · 779 阅读 · 0 评论