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

Java_网络编程

Java 网络编程的核心,就是让两个(或多个)Java 程序(可能在同一台电脑,也可能在不同电脑)通过网络交换数据。你可以把它理解成:写代码让两台电脑 “隔空对话”,比如客户端给服务器发消息、服务器返回数据,这就是最基础的网络编程。
 

一、核心概念(先搞懂这些,不绕晕)

 

1. 两个核心协议:TCP vs UDP(大白话区分)

 
协议类型 特点(大白话) 适用场景
TCP 像打电话:先拨号建立连接,说话能保证对方听到,还能确认顺序,丢了会重发 要求数据可靠的场景(比如文件传输、登录注册、聊天)
UDP 像发短信:不用建立连接,直接发,不管对方收没收到,速度快 要求速度不要求 100% 可靠的场景(比如直播、游戏、视频通话)
 

2. 关键类 / 接口(Java 帮我们封装好了,不用自己写底层)

 
  • InetAddress:表示 IP 地址(比如把 “127.0.0.1” 或 “localhost” 封装成对象);
  • ServerSocket:TCP 服务器端专用,用来 “监听” 客户端的连接请求;
  • Socket:TCP 客户端 / 服务器端的 “通信管道”,通过它收发数据;
  • DatagramSocket/DatagramPacket:UDP 专用,用来发送 / 接收 “数据包”。

二、实战案例(从简单到复杂,直接跑通)

案例 1:TCP 基础通信(客户端发消息,服务器回消息)

这是最经典的 Java 网络编程入门案例,先建服务器,再建客户端,实现双向对话。

1. TCP 服务器端代码

java
 
运行
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;// TCP服务器:监听端口,接收客户端消息并回复
public class TcpServer {public static void main(String[] args) {// 1. 定义监听端口(建议用1024以上,避免占用系统端口)int port = 8888;try (// 2. 创建ServerSocket,监听指定端口ServerSocket serverSocket = new ServerSocket(port);// 3. 等待客户端连接(accept()是阻塞方法,有连接才会继续)Socket socket = serverSocket.accept();// 4. 获取输入流(读客户端发的消息)BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 5. 获取输出流(给客户端回消息)OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream())) {System.out.println("客户端已连接:" + socket.getInetAddress());// 6. 读取客户端消息String clientMsg = br.readLine();System.out.println("收到客户端消息:" + clientMsg);// 7. 给客户端回复消息String serverMsg = "已收到你的消息:" + clientMsg;osw.write(serverMsg + "\n"); // 加换行,客户端才能用readLine()读取osw.flush(); // 刷新缓冲区,确保消息发出去} catch (IOException e) {e.printStackTrace();}}
}
 

2. TCP 客户端代码

java
 
运行
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;// TCP客户端:连接服务器,发消息并接收回复
public class TcpClient {public static void main(String[] args) {// 1. 服务器IP(本地测试用localhost,远程用服务器实际IP)String serverIp = "localhost";// 2. 服务器端口(必须和服务器端一致)int port = 8888;try (// 3. 创建Socket,连接服务器Socket socket = new Socket(serverIp, port);// 4. 获取输出流(给服务器发消息)OutputStreamWriter osw = new OutputStreamWriter(socket.getOutputStream());// 5. 获取输入流(读服务器回复)BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {// 6. 给服务器发消息String clientMsg = "Hello Java网络编程!";osw.write(clientMsg + "\n");osw.flush();// 7. 读取服务器回复String serverMsg = br.readLine();System.out.println("收到服务器回复:" + serverMsg);} catch (IOException e) {e.printStackTrace();}}
}
 

运行步骤(新手必看)

  1. 先运行TcpServer(服务器启动,等待连接);
  2. 再运行TcpClient(客户端连接服务器,发消息);
  3. 服务器控制台输出:客户端已连接:/127.0.0.1 + 收到客户端消息:Hello Java网络编程!
  4. 客户端控制台输出:收到服务器回复:已收到你的消息:Hello Java网络编程!
 

案例 2:UDP 简单通信(无连接,直接发消息)

 
UDP 不用建立连接,代码更简单,但不保证消息一定能收到。
 

1. UDP 发送端代码

java
 
运行
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;// UDP发送端:直接发数据包,不用连接
public class UdpSender {public static void main(String[] args) {try (// 1. 创建DatagramSocket(发送端端口可选,系统会自动分配)DatagramSocket socket = new DatagramSocket()) {// 2. 要发送的消息String msg = "UDP消息:Hello!";byte[] data = msg.getBytes();// 3. 目标地址(服务器IP)和端口InetAddress targetIp = InetAddress.getByName("localhost");int targetPort = 9999;// 4. 封装成数据包DatagramPacket packet = new DatagramPacket(data, data.length, targetIp, targetPort);// 5. 发送数据包socket.send(packet);System.out.println("UDP消息已发送:" + msg);} catch (IOException e) {e.printStackTrace();}}
}
 

2. UDP 接收端代码

 
java
 
运行
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;// UDP接收端:监听端口,接收数据包
public class UdpReceiver {public static void main(String[] args) {int port = 9999;try (// 1. 创建DatagramSocket,绑定指定端口DatagramSocket socket = new DatagramSocket(port)) {// 2. 创建空数据包,用来接收数据(缓冲区大小建议1024)byte[] buffer = new byte[1024];DatagramPacket packet = new DatagramPacket(buffer, buffer.length);System.out.println("UDP接收端已启动,监听端口:" + port);// 3. 接收数据包(阻塞方法,有数据才会继续)socket.receive(packet);// 4. 解析数据包内容String msg = new String(packet.getData(), 0, packet.getLength());System.out.println("收到UDP消息:" + msg);System.out.println("发送方IP:" + packet.getAddress() + ",端口:" + packet.getPort());} catch (IOException e) {e.printStackTrace();}}
}
 

三、进阶知识点(新手先了解,后续深入)

 
  1. 多线程服务器:上面的 TCP 服务器只能处理一个客户端,实际开发中需要用线程池,每来一个客户端就开一个线程处理(比如聊天服务器、Web 服务器);
  2. NIO(非阻塞 IO):传统的 Socket 是 “阻塞 IO”,NIO 可以用少量线程处理大量客户端连接,适合高并发场景(比如 Netty 框架就是基于 NIO);
  3. URL/URLConnection:Java 封装了访问网页的工具,比如通过URL类读取网页内容、下载文件,不用自己写底层 TCP;
  4. 常见框架:实际开发很少手写 Socket,常用 Netty(高性能网络框架)、Tomcat(Web 服务器,基于 Java 网络编程)等。

四、常见坑(新手避坑)

  1. 端口被占用:运行服务器时如果报错 “Address already in use”,换个端口(比如 8888 换成 8889),或关闭占用端口的程序;
  2. 防火墙 / 网络问题:远程连接时,确保服务器端口开放,防火墙没拦截;
  3. 流未关闭 / 刷新:发送消息后要flush(),用完流要关闭(建议用 try-with-resources 自动关闭);
  4. UDP 数据包大小:单个 UDP 数据包不能超过 64KB,否则会被截断。

总结

  1. Java 网络编程核心是基于 TCP/UDP 协议,通过 Socket 相关类实现跨程序数据交互
  2. TCP 可靠但稍慢,适合数据不能丢的场景;UDP 快但不可靠,适合实时性要求高的场景;
  3. 新手先掌握基础 TCP/UDP 通信案例,再学习多线程、NIO 和框架,逐步深入。
http://www.jsqmd.com/news/204607/

相关文章:

  • 【Docker Compose版本适配终极指南】:99%的人都忽略的兼容性陷阱与解决方案
  • 【Java毕设全套源码+文档】基于springboot的办公管理系统设计与实现(丰富项目+远程调试+讲解+定制)
  • Docker Compose版本适配实战(从v2到v3的平滑过渡秘籍)
  • 2026年北京靠谱小学生近视配镜品牌店排行榜,精选比较不错的小学生近视眼镜店推荐 - mypinpai
  • Docker监控工具排行榜:2024年最值得学习的5个开源项目(第4个很多人不知道)
  • 是否开源权重?VibeThinker许可证类型及使用限制说明
  • 大学生刷题利器:VibeThinker辅助ACM/ICPC备赛全攻略
  • 计算机毕业设计springboot基于大数据的体育平台 基于SpringBoot与Hadoop的全民智慧体育数据服务平台 融合大数据技术的SpringBoot体育赛事综合运营系统
  • Docker Git 工作树切换全攻略(开发者必藏的4种高阶方案)
  • IP黑名单机制:封禁恶意爬虫和攻击者
  • 【Docker安全监控终极指南】:揭秘Falco实时监控的5大核心应用场景
  • 2026年哈尔滨商务车门窗改装公司推荐:商务车改装哪家专业? - 工业设备
  • 自动化测试在微服务架构中的应用:挑战、策略与最佳实践
  • 吐血推荐!本科生论文神器TOP8 AI论文平台测评
  • 危机公关预案:若出现重大bug该如何应对
  • 涨薪 / 应急必用!网安人士必备的 30 个安全工具,附使用场景
  • 【Docker资源管理必知】:为什么你的容器总是OOM被杀?
  • 2026必备!10个AI论文网站,专科生毕业论文轻松搞定!
  • 日志聚合分析:ELK栈集中管理所有文本日志
  • 微服务架构下的Docker网络优化,性能提升200%的秘密武器
  • 20251224
  • Docker Compose 两种安装与使用方式详解(适用于 Docker 19.03 版本)
  • 2026年新兴测试工具大盘点
  • HTTPS强制跳转:确保传输层加密
  • 深入解析:2025年AI内容矩阵工具,谁主沉浮?
  • 二次函数综合(17年湛江一中自主招生)
  • 容器日志排错慢?掌握这6步法,3分钟锁定问题根源
  • 基于直方图优化的图像去雾MATLAB实现
  • 2026视频号代运营服务公司TOP5权威推荐:专业机构甄选指南 - 工业推荐榜
  • 2026年上海口碑不错的婚介公司排行榜,推荐知名婚介公司精选名单 - myqiye