马士兵教育周老师透彻的讲 Socket示例解析------目标netty---step1

tech2025-04-22  9

java nio Socket示例解析

环境介绍1.新增最基础的 BIO版本的 ServerSocket 绑定端口号(8092)2. 运行javac ***.java 执行编译,编译后 本目录下多了 ***.class 文件3.strace -ff -o ./out java serverSocket024.Jps / netstat -natp5.cd /proc/***/task 及 cd /proc/***/fd6.netstat -natp7.nc localhost 8092 使用nc程序链接8092端口8.netstat -natp 查看nc登录后tcp连接变化9.查看对应 cd proc/***/fd(task)的变化10.查看main方法所在线程1709文件输出11.查看 系统调用函数 man 2 ****

环境介绍

视频介绍:清华大牛权威讲解nio,epoll,多路复用,更好的理解redis-netty-Kafka等热门技术 视频url: https://www.bilibili.com/video/BV11K4y1C7rm?from=search&seid=8685677326405037287

服务器:本运行在阿里云服务器上面 操作系统:Linux CentOS Jdk: java8

1.新增最基础的 BIO版本的 ServerSocket 绑定端口号(8092)

下面展示一些 内联代码片。

import java.io.*; import java.net.ServerSocket; import java.net.Socket; public class serverSocket02{ public static void main(String[] args) throws Exception{ ServerSocket server = new ServerSocket(8092); System.out.println("step1: new ServerSocket(8092)"); while(true){ Socket client = server.accept(); System.out.println("step2:client\t"+client.getPort()); new Thread(()->{ try{ InputStream in = client.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); while(true){ System.out.println(reader.readLine()); } } catch (IOException e){ e.printStackTrace(); } }).start(); } } }

2. 运行javac ***.java 执行编译,编译后 本目录下多了 ***.class 文件

javac serverSocket02.java

3.strace -ff -o ./out java serverSocket02

执行抓取程序对内核调用指令trace trace -ff -o ./out java *** 表示跟增***的所有系统调用,将其输出到当前目录下的out开头的文件夹下,执行后如果目录为out3399 ,表示此进行启动了一个3399线程 strace -ff -o ./out java serverSocket02.class ----- 错误 strace -ff -o ./out java serverSocket02 ----- 正确

4.Jps / netstat -natp

jps 查看当前运行程序进程号 netstat -natp 查看当前tcp连接 testSocket 3333 ,表示当前运行程序主进程号码是3333

5.cd /proc/***/task 及 cd /proc/***/fd

Cd /proc/3333/task ,查看此进行下所有子进程,(当一个程序运行老是死掉,可以观察是否此程序开启了很多线程) cd /proc/1708/task Cd /proc/3333/fd 会看到 1 **** 2 **** 3 **** 一切程序都是文件 ****/jre/lib/rt.jar runtime运行时 cd /proc/1708/fd

6.netstat -natp

Netstat -natp 查看所有tcp进程 会看到 有一个8092的本地进程为listen状态

7.nc localhost 8092 使用nc程序链接8092端口

nc localhost 8092

8.netstat -natp 查看nc登录后tcp连接变化

Netstat -natp 会看到 增加了一个8092状态的established状态的端口,一个nc的客户端程序

9.查看对应 cd proc/***/fd(task)的变化

10.查看main方法所在线程1709文件输出

1708 ---- 主线程 1709----main函数所在线程

Vim out.1709 :set nu----设置显示行号

/socket.*7$ ----------查看 socket 开始 7 结束的行 socket(AF_INET6, SOCK_STREAM, IPPROTO_IP) = 7 ----------------------------- 表示一个ServerSocket fd 为7

bind(7, {sa_family=AF_INET6, sin6_port=htons(8092), inet_pton(AF_INET6, “::”, &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, 28) = 0 ------------8092端口绑定到 fd 7 listen(7, 50) --------------Listen 7 accept(7, {sa_family=AF_INET6, sin6_port=htons(42578), inet_pton(AF_INET6, “::1”, &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, [28]) = 8 ----------------表示 fd 为7 接收 42578 端口的链接 , 此 链接fd 为8

11.查看 系统调用函数 man 2 ****

man 2 socket man 2 bind man 2 listen man 2 accept

最新回复(0)