当前位置: 首页 > ds >正文

day23——Java网络编程终极指南:从基础到实战,全面掌握CS/BS架构通信

文章目录

      • 一、网络编程基础概念
        • 1. 什么是网络编程?
        • 2. 基本通信架构
      • 二、网络通信三要素详解
        • 1. IP地址:设备的网络身份证
        • 2. 端口号:应用程序的门牌号
        • 3. 通信协议:数据传输的规则
      • 三、UDP通信实战
        • 1. 核心类说明
        • 2. 快速入门(一发一收)
        • 3. 多发多收改进
      • 四、TCP通信深度解析
        • 1. 核心类说明
        • 2. 快速入门(一发一收)
        • 3. 多线程支持多客户端
        • 4. 群聊功能实现
      • 五、BS架构实现原理
        • 1. 核心特点
        • 2. HTTP响应格式
        • 3. Java服务端实现
      • 六、核心API总结
      • 七、应用场景选择指南
      • 总结

本文深入剖析Java网络编程核心技术,涵盖CS/BS架构、网络通信三要素、UDP/TCP协议实现及实战案例,助你构建高效网络应用。

一、网络编程基础概念

1. 什么是网络编程?

网络编程使设备中的程序能够与其他网络设备中的程序进行数据交互,实现跨设备通信。典型应用场景包括:

  • 即时通讯(微信、QQ)
  • 网页浏览(浏览器访问服务器)
  • 文件传输(FTP工具)
  • 远程控制(TeamViewer)
2. 基本通信架构
架构类型组成特点应用场景
CS架构客户端/服务端需安装专用客户端,服务端需开发微信、大型游戏
BS架构浏览器/服务端无需安装客户端,通过浏览器访问网页应用、在线系统

二、网络通信三要素详解

在这里插入图片描述

1. IP地址:设备的网络身份证
  • IPv4:32位地址(4字节),点分十进制表示(192.168.1.1)
  • IPv6:128位地址(16字节),冒分十六进制表示(2001:0db8::ff00:0042)
  • 特殊地址
    • 127.0.0.1localhost:本机地址
    • 公网IP vs 内网IP:192.168.x.x 为常见局域网地址

常用命令:

ipconfig    # 查看本机IP
ping www.baidu.com  # 测试网络连通性
2. 端口号:应用程序的门牌号
  • 周知端口:0~1023(HTTP:80, FTP:21)
  • 注册端口:1024~49151(用户程序使用)
  • 动态端口:49152~65535(临时分配)

重要规则:同一设备中不同应用程序端口号必须唯一!

3. 通信协议:数据传输的规则
协议特点适用场景数据包大小
UDP无连接、不可靠、速度快视频流、实时游戏≤64KB
TCP面向连接、可靠传输、速度较慢文件传输、网页浏览无限制

TCP建立/断开连接过程:

SYN
SYN-ACK
ACK
FIN
ACK
FIN
ACK
三次握手
客户端
四次挥手
服务端

三、UDP通信实战

1. 核心类说明
  • DatagramSocket:通信端点(街道两端的人)
  • DatagramPacket:数据包容器(装数据的盘子)
2. 快速入门(一发一收)

客户端代码:

// 创建客户端Socket(端口7777)
DatagramSocket socket = new DatagramSocket(7777);  // 封装数据包(目标IP/端口)
byte[] data = "Hello Server!".getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length,InetAddress.getLocalHost(), 6666
);socket.send(packet);  // 发送数据
socket.close();       // 释放资源

服务端代码:

// 创建服务端Socket(端口6666)
DatagramSocket socket = new DatagramSocket(6666);  // 准备接收缓冲区(64KB)
byte[] buffer = new byte[1024 * 64];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);socket.receive(packet);  // 阻塞接收数据// 解析接收到的数据
String msg = new String(packet.getData(), 0, packet.getLength()
);
System.out.println("收到消息: " + msg);
3. 多发多收改进

客户端持续发送:

Scanner sc = new Scanner(System.in);
while (true) {System.out.print("请输入消息: ");String msg = sc.nextLine();if ("exit".equals(msg)) break;// 封装并发送数据包byte[] data = msg.getBytes();DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getLocalHost(), 6666);socket.send(packet);
}

服务端持续接收:

while (true) {socket.receive(packet);  // 持续接收String msg = new String(packet.getData(), 0, packet.getLength());System.out.println("客户端说: " + msg);
}

四、TCP通信深度解析

1. 核心类说明
  • Socket:客户端通信端点
  • ServerSocket:服务端监听端口
2. 快速入门(一发一收)

客户端代码:

// 连接服务端(IP+端口)
Socket socket = new Socket("127.0.0.1", 8888);  // 获取输出流并发送数据
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("TCP测试消息");
dos.close();

服务端代码:

// 创建服务端并监听端口
ServerSocket server = new ServerSocket(8888);  // 等待客户端连接(阻塞方法)
Socket socket = server.accept();  // 获取输入流接收数据
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
String msg = dis.readUTF();
System.out.println("收到消息: " + msg);
3. 多线程支持多客户端

服务端改造方案:

// 创建线程池处理连接
ThreadPoolExecutor pool = new ThreadPoolExecutor(16 * 2, 16 * 2, 0, TimeUnit.SECONDS,new ArrayBlockingQueue<>(8)
);while (true) {Socket clientSocket = server.accept();pool.execute(new ClientHandler(clientSocket));
}// 客户端处理线程
class ClientHandler implements Runnable {private Socket socket;public void run() {// 处理该客户端的所有通信}
}
4. 群聊功能实现
// 服务端存储所有在线Socket
public static Set<Socket> onlineSockets = Collections.synchronizedSet(new HashSet<>());// 消息广播方法
private void broadcast(String msg) {for (Socket client : onlineSockets) {OutputStream os = client.getOutputStream();DataOutputStream dos = new DataOutputStream(os);dos.writeUTF(msg);dos.flush();}
}

五、BS架构实现原理

1. 核心特点
  • 客户端使用浏览器(无需开发)
  • 通信基于HTTP协议
  • 服务端需按HTTP格式响应
2. HTTP响应格式
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8<html><body><h1>Hello BS架构!</h1></body>
</html>
3. Java服务端实现
// 创建线程处理浏览器请求
class BrowserHandler implements Runnable {private Socket socket;public void run() {OutputStream os = socket.getOutputStream();PrintStream ps = new PrintStream(os);// 发送HTTP响应头ps.println("HTTP/1.1 200 OK");ps.println("Content-Type:text/html;charset=UTF-8");ps.println();  // 空行分隔头部和正文// 发送网页内容ps.println("<div style='color:blue;font-size:48px'>");ps.println("  欢迎访问Java服务端!");ps.println("</div>");ps.close();}
}

六、核心API总结

类/方法功能说明
InetAddress.getLocalHost()获取本机IP地址对象
DatagramSocket.send()UDP发送数据包
DatagramSocket.receive()UDP接收数据包
Socket.getOutputStream()获取TCP输出流
ServerSocket.accept()监听TCP客户端连接
InetAddress.isReachable()检测网络连通性

七、应用场景选择指南

  1. UDP适用场景

    • 实时视频/音频传输
    • 在线游戏(FPS、MOBA类)
    • DNS域名解析
    • 物联网传感器数据采集
  2. TCP适用场景

    • 文件传输(FTP)
    • 网页浏览(HTTP/HTTPS)
    • 电子邮件(SMTP/POP3)
    • 数据库连接
  3. 选择建议

    • 需要可靠传输 → TCP
    • 需要低延迟 → UDP
    • 跨平台/免安装 → BS架构
    • 高性能/复杂交互 → CS架构

最佳实践:现代应用常组合使用,如视频会议使用UDP传输媒体流+TCP传输控制信号。

总结

掌握Java网络编程需要深入理解网络通信三要素(IP、端口、协议),熟练使用UDP和TCP两种通信方式。关键点包括:

  1. UDP适合快速传输小数据包,TCP保证可靠的大数据传输
  2. 多线程处理是支持多客户端的核心方案
  3. BS架构依赖HTTP协议规范
  4. 群聊功能通过服务端消息广播实现
  5. 生产环境推荐使用线程池管理连接

本文涵盖从基础概念到高级应用的完整知识体系,通过代码示例和架构对比,助你构建坚实的网络编程基础。无论是开发即时通讯工具、网络游戏还是分布式系统,这些核心知识都将发挥关键作用。

http://www.xdnf.cn/news/15721.html

相关文章:

  • 【RL强化学习】Policy-Based Reinforcement Learning 策略学习
  • 知网学术不端论文检测查重助手(Windows)
  • [MRCTF2020]PYWebsite
  • Kubernetes (k8s)环境重启Pod方式总结
  • 访问网页的全过程笔记
  • SenseGlove力反馈手套:医疗、生产制造、军事模拟与远程机器人控制新革命
  • 游戏开发中防止“范围蔓延”
  • 部分排序算法的Java模拟实现(复习向,非0基础)
  • 多态,内部类(匿名内部类),常用API(1)
  • 推荐《Python 编程:从入门到实践》之Python编程的基础知识
  • H3CNE综合实验之机器人
  • Swift6.0 - 5、基本运算符
  • vue的provide和inject
  • 对称二叉树、二叉树直径
  • el-input 回显怎么用符号¥和变量拼接展示?
  • Golang 并发快速上手
  • (新手友好)MySQL学习笔记(完):事务和锁
  • 自学中医笔记(一)
  • NO.6数据结构树|二叉树|满二叉树|完全二叉树|顺序存储|链式存储|先序|中序|后序|层序遍历
  • MH32F103A单片机 可兼容替代STMCCT6/RCT6/RBT6,增强型
  • 【Android】TextView的使用
  • 大语言模型幻觉检测:语义熵揭秘
  • webpack将组件vue进行编译混淆,并能正常使用编译之后的文件
  • AR智能巡检:电力运维的数字化变革
  • Ansible 查看PostgreSQL的版本
  • 编译原理第四到五章(知识点学习/期末复习/笔试/面试)
  • 二重循环:输入行数,打印直角三角形和倒直角三角形
  • UE5 相机后处理材质与动态参数修改
  • 创建第二大脑的关键还是方法
  • xss-labs练习