news 2026/4/29 2:23:16

什么是 Java 的网络编程?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
什么是 Java 的网络编程?

什么是 Java 网络编程?

简单来说,Java 网络编程就是使用 Java 语言来实现不同计算机(或同一计算机上的不同进程)之间的数据交换和通信。它允许运行在不同设备上的 Java 程序连接起来,形成一个更大的分布式应用系统。

你可以把它想象成现实世界中的“电话系统”:

  • 你的 Java 程序就像一部电话机。
  • 网络就是电话线路和交换机。
  • IP 地址就是电话号码。
  • 端口号就是分机号,用来指定接听电话的具体部门(即程序中的特定功能)。

核心概念与模型

Java 网络编程主要围绕以下几个核心概念和两种核心模型展开:

1. 核心概念
  • IP 地址:网络中设备的唯一标识,用于定位目标计算机。
  • 端口号(Port):一台计算机上可以有多个网络程序同时运行,端口号(0-65535)用于区分这些不同的程序。例如,Web 服务通常用 80 端口,SSH 服务用 22 端口。
  • 协议(Protocol):通信双方事先约定好的规则。最常见的网络协议是TCPUDP
2. 两种核心网络模型

Java 主要支持两种通信模型,对应两种协议:

A. TCP 编程(传输控制协议)

  • 特点:面向连接、可靠、基于字节流
  • 类比:就像打电话。通话前需要先拨号建立连接,确认对方接通后才可以对话。它能保证你说的话按顺序、不丢失地传到对方耳中。
  • 适用场景:对数据准确性要求高的场景,如文件传输、发送邮件、网页浏览(HTTP/HTTPS 底层就是 TCP)。
  • Java 实现:使用java.net.Socket(客户端)和java.net.ServerSocket(服务端)类。

B. UDP 编程(用户数据报协议)

  • 特点:无连接、不可靠、基于数据报
  • 类比:就像发短信或寄明信片。你不需要和对方建立连接,直接把信息发出去就行。它速度快,但不保证对方一定能收到,也不保证按发送顺序收到。
  • 适用场景:对实时性要求高、允许少量数据丢失的场景,如视频会议、在线游戏、DNS 查询。
  • Java 实现:使用java.net.DatagramSocketjava.net.DatagramPacket类。

一个简单的 TCP 编程示例

下面是一个最简单的“回声”(Echo)服务器和客户端的代码,帮助你直观理解。

服务端(Server.java)

服务端的任务是等待客户端的连接,收到客户端发来的消息后,原样发回去。

importjava.io.*;importjava.net.*;// TCP 服务端publicclassServer{publicstaticvoidmain(String[]args)throwsIOException{// 1. 创建一个 ServerSocket,在指定端口(例如 8888)上监听客户端的连接请求intport=8888;ServerSocketserverSocket=newServerSocket(port);System.out.println("服务器启动,正在端口 "+port+" 上监听...");// 2. 调用 accept() 方法,该方法会阻塞,直到有客户端连接上来SocketclientSocket=serverSocket.accept();System.out.println("客户端已连接,客户端IP: "+clientSocket.getInetAddress());// 3. 获取输入流,用于读取客户端发送的数据BufferedReaderin=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));// 4. 获取输出流,用于向客户端发送数据PrintWriterout=newPrintWriter(clientSocket.getOutputStream(),true);StringclientMessage;// 5. 循环读取客户端消息while((clientMessage=in.readLine())!=null){System.out.println("收到客户端消息: "+clientMessage);// 6. 将消息原样发回给客户端("回声")out.println("服务器回声: "+clientMessage);// 如果客户端发送 "bye",则退出循环if("bye".equalsIgnoreCase(clientMessage)){break;}}// 7. 关闭资源in.close();out.close();clientSocket.close();serverSocket.close();System.out.println("服务器已关闭。");}}
客户端(Client.java)

客户端的任务是连接到服务器,发送一条消息,然后接收并打印服务器的回复。

importjava.io.*;importjava.net.*;// TCP 客户端publicclassClient{publicstaticvoidmain(String[]args)throwsIOException{// 1. 指定服务器的 IP 地址和端口号StringserverHost="localhost";// 如果是本地测试,可以用 "localhost" 或 "127.0.0.1"intserverPort=8888;// 2. 创建一个 Socket,直接尝试连接到服务器Socketsocket=newSocket(serverHost,serverPort);System.out.println("已连接到服务器...");// 3. 获取输出流,用于向服务器发送数据PrintWriterout=newPrintWriter(socket.getOutputStream(),true);// 4. 获取输入流,用于读取服务器返回的数据BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));// 5. 从控制台读取用户输入BufferedReaderstdIn=newBufferedReader(newInputStreamReader(System.in));StringuserInput;System.out.print("请输入要发送的消息 (输入 'bye' 退出): ");// 6. 循环读取用户输入并发送while((userInput=stdIn.readLine())!=null){// 发送消息到服务器out.println(userInput);// 接收服务器的回声并打印StringserverResponse=in.readLine();System.out.println(serverResponse);// 如果用户输入 "bye",则退出循环if("bye".equalsIgnoreCase(userInput)){break;}System.out.print("请继续输入: ");}// 7. 关闭资源out.close();in.close();stdIn.close();socket.close();System.out.println("客户端已断开连接。");}}

如何运行?

  1. 先编译两个文件:javac Server.java Client.java
  2. 在一个命令行窗口运行服务端:java Server
  3. 在另一个命令行窗口运行客户端:java Client
  4. 在客户端窗口输入文字,就能看到服务器回声的效果。

总结

Java 网络编程是 Java SE 标准库中非常强大和成熟的一部分。通过java.net包(以及更高级的java.nio包),开发者可以轻松构建从简单的客户端/服务器应用到复杂的高并发分布式系统。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 2:24:55

SpringBoot整合ES8向量检索:构建高精度智能客服系统的工程实践

背景痛点:传统关键词匹配的困境 在智能客服这类需要精准理解用户意图的场景中,传统基于TF-IDF(词频-逆文档频率)的关键词匹配方案已经显得力不从心。其核心问题在于,它本质上是一种“词汇匹配”而非“语义理解”。 举个…

作者头像 李华
网站建设 2026/4/29 3:29:40

[AI提效-15]-豆包多对话功能详解:打破传统AI工具“单对话单一主题、新对话从零起步”的局限,高效衔接创作,告别反复沟通成本。

在日常使用AI工具辅助创作、解答咨询的过程中,“连贯沟通、精准衔接”是用户的核心诉求。很多用户在使用普通AI工具时,常会遭遇三大痛点:每次开启新对话都需重复说明核心需求、上一轮沟通逻辑无法连贯延续、多主题并行推进时内容极易混乱。豆…

作者头像 李华
网站建设 2026/4/19 0:20:40

智能客服转人工:从架构设计到实战避坑指南

最近在做一个智能客服系统的升级,其中一个核心模块就是“转人工”。这个功能听起来简单,不就是把用户从机器人对话切换到人工坐席嘛?但真做起来,坑是一个接一个。用户排队排到天荒地老、好不容易接通了还得把问题重新说一遍、高峰…

作者头像 李华
网站建设 2026/4/19 0:36:28

智能客服实体填槽技术实战:从原理到避坑指南

1. 背景痛点:为什么实体填槽这么“难缠”? 大家好,最近在折腾智能客服项目,发现“实体填槽”这个环节真是让人又爱又恨。简单来说,填槽就是从用户说的话里,把关键信息(实体)抓出来&a…

作者头像 李华
网站建设 2026/4/29 3:28:44

具身智能:原理、算法与系统 第18章 模仿学习与人类示范

目录 第18章 模仿学习与人类示范 18.1 行为克隆 18.1.1 监督学习视角 18.1.2 数据集聚合(DAgger) 18.1.3 交互式模仿学习 18.1.4 行为克隆的局限与改进 18.2 逆强化学习 18.2.1 奖励函数学习 18.2.2 最大熵 IRL 18.2.3 生成对抗模仿学习(GAIL) 18.2.4 对抗性 IR…

作者头像 李华
网站建设 2026/4/18 21:24:36

AI智能客服与知识库产品设计实战:从功能列表到原型实现

最近在做一个AI智能客服的项目,从零开始设计整个系统,踩了不少坑,也学到了很多。今天就把我的实战经验整理成笔记,分享给同样想入门的朋友们。我们不讲太多高深的理论,就聊聊怎么一步步把一个能用的AI客服系统搭起来&a…

作者头像 李华