文章目录

  • 一、引言
  • 二、计算机网络基础
      • 1、计算机网络的概念
      • 2、网络地址的重要性
  • 三、套接字编程:网络通信的基石
      • 1、套接字的概念
      • 2、TCP通信编程示例
  • 四、TCP通信编程:可靠的数据传输
      • 1、TCP协议的特点
      • 2、实际应用中的TCP通信
  • 五、UDP通信编程:高效的数据传输
      • 1、UDP协议的特点
      • 2、UDP通信编程示例
  • 六、广播通信:一对多的数据传输
      • 1、广播通信的概念
      • 2、广播通信的实现示例
  • 七、总结


一、引言

在Java的编程版图中,网络编程宛如一座桥梁,连接着不同的计算机,让数据能够在网络中自由穿梭。它使得我们的程序不再局限于单机运行,而是能够与远程服务器进行交互,实现各种强大的功能,如网页浏览、文件传输、即时通讯等。今天,就让我们一同深入剖析Java中的网络编程技术,从计算机网络的基础概念,到套接字编程、TCP/UDP通信编程以及广播通信等各个方面,揭开网络编程的神秘面纱。

二、计算机网络基础

1、计算机网络的概念

计算机网络是将多台计算机通过通信线路连接起来,实现资源共享和信息交换的系统。它就像是一个庞大的信息高速公路网络,计算机则是网络中的车辆,通过各种协议和规则在网络中行驶,传输数据。例如,互联网就是全球最大的计算机网络,它连接了世界各地的计算机,让人们能够随时随地获取和共享信息。

2、网络地址的重要性

网络地址用于唯一标识网络中的设备,就像每家每户都有唯一的门牌号一样。常见的网络地址有IP地址和端口号。IP地址用于标识设备在网络中的位置,它就像是设备在网络中的“家庭住址”。端口号则用于标识设备上的具体应用程序,就像每个房间的门牌号,通过端口号,数据能够准确地送达目标应用程序。例如,一个Web服务器的IP地址可能是192.168.1.100,而其HTTP服务的端口号通常是80,当我们通过浏览器访问该服务器时,浏览器会根据IP地址找到服务器,再通过端口号80与Web服务程序进行通信。

三、套接字编程:网络通信的基石

1、套接字的概念

套接字(Socket)是网络通信的端点,它提供了一种在计算机网络中进行数据传输的机制。在Java中,套接字编程主要涉及SocketServerSocket类,用于实现基于TCP协议的网络通信。可以把套接字想象成电话,ServerSocket就像是电话的听筒,等待来电;Socket则像是打电话的一方,主动发起连接。

2、TCP通信编程示例

下面是一个简单的TCP服务器和客户端的示例代码,展示了如何使用套接字进行通信:

// TCP服务器端代码
import java.io.*;
import java.net.*;public class TCPServer {public static void main(String[] args) {try {// 创建ServerSocket,监听指定端口ServerSocket serverSocket = new ServerSocket(8888);System.out.println("服务器已启动,等待客户端连接...");// 等待客户端连接Socket clientSocket = serverSocket.accept();System.out.println("客户端已连接");// 获取输入流,读取客户端发送的数据BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));String message = in.readLine();System.out.println("收到客户端消息:" + message);// 获取输出流,向客户端发送数据PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);out.println("服务器已收到消息");// 关闭连接in.close();out.close();clientSocket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}
}// TCP客户端代码
import java.io.*;
import java.net.*;public class TCPClient {public static void main(String[] args) {try {// 创建Socket,连接服务器Socket socket = new Socket("localhost", 8888);// 获取输出流,向服务器发送数据PrintWriter out = new PrintWriter(socket.getOutputStream(), true);out.println("你好,服务器!");// 获取输入流,读取服务器返回的数据BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));String response = in.readLine();System.out.println("收到服务器响应:" + response);// 关闭连接out.close();in.close();socket.close();} catch (IOException e) {e.printStackTrace();}}
}

在上述代码中,服务器端通过ServerSocket监听指定端口,等待客户端的连接请求。当客户端通过Socket连接到服务器后,双方通过输入流和输出流进行数据的收发。

四、TCP通信编程:可靠的数据传输

1、TCP协议的特点

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议。它在数据传输前会建立连接,确保数据的准确性和顺序性。就像打电话一样,双方需要先建立通话连接,然后才能进行交流。TCP会对数据进行分段、编号、确认和重传等操作,以保证数据能够完整无误地到达目的地。

2、实际应用中的TCP通信

在实际的网络应用中,TCP通信广泛应用于各种场景,如Web浏览、电子邮件传输等。例如,当我们使用浏览器访问网页时,浏览器和Web服务器之间就是通过TCP协议进行通信的。浏览器发送HTTP请求,Web服务器通过TCP连接返回网页数据,确保我们能够准确地获取到所需的网页内容。

五、UDP通信编程:高效的数据传输

1、UDP协议的特点

UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议。它不像TCP那样需要建立连接,而是直接将数据打包发送出去,不保证数据是否能够到达目的地。UDP的优点是传输效率高,适用于对实时性要求较高但对数据准确性要求相对较低的场景,如视频流传输、实时语音通讯等。

2、UDP通信编程示例

下面是一个简单的UDP服务器和客户端的示例代码:

// UDP服务器端代码
import java.net.*;public class UDPServer {public static void main(String[] args) {try {// 创建DatagramSocket,监听指定端口DatagramSocket serverSocket = new DatagramSocket(9999);byte[] receiveData = new byte[1024];System.out.println("UDP服务器已启动,等待数据包...");// 接收数据包DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);serverSocket.receive(receivePacket);// 处理接收到的数据String message = new String(receivePacket.getData(), 0, receivePacket.getLength());System.out.println("收到消息:" + message);// 关闭SocketserverSocket.close();} catch (Exception e) {e.printStackTrace();}}
}// UDP客户端代码
import java.net.*;public class UDPClient {public static void main(String[] args) {try {// 创建DatagramSocketDatagramSocket clientSocket = new DatagramSocket();InetAddress serverAddress = InetAddress.getByName("localhost");// 准备要发送的数据String message = "你好,UDP服务器!";byte[] sendData = message.getBytes();// 创建数据包并发送DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, 9999);clientSocket.send(sendPacket);// 关闭SocketclientSocket.close();} catch (Exception e) {e.printStackTrace();}}
}

在上述代码中,UDP服务器通过DatagramSocket监听指定端口,接收客户端发送的数据包。客户端则通过DatagramSocket将数据打包发送到服务器的指定地址和端口。

六、广播通信:一对多的数据传输

1、广播通信的概念

广播通信是一种一对多的数据传输方式,发送方将数据发送到网络中的所有设备,或者特定广播地址对应的设备。就像在广场上大声喊话,所有人都能听到。在局域网中,广播通信常用于发现网络中的其他设备或服务。

2、广播通信的实现示例

以下是一个简单的广播通信示例代码:

// 广播发送端代码
import java.net.*;public class BroadcastSender {public static void main(String[] args) {try {// 创建DatagramSocketDatagramSocket socket = new DatagramSocket();// 广播地址,在局域网中通常是255.255.255.255InetAddress broadcastAddress = InetAddress.getByName("255.255.255.255");// 准备要发送的数据String message = "这是一条广播消息";byte[] sendData = message.getBytes();// 创建数据包并发送,使用广播地址和指定端口DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, broadcastAddress, 8888);socket.send(sendPacket);// 关闭Socketsocket.close();} catch (Exception e) {e.printStackTrace();}}
}// 广播接收端代码
import java.net.*;public class BroadcastReceiver {public static void main(String[] args) {try {// 创建DatagramSocket,绑定到指定端口DatagramSocket socket = new DatagramSocket(8888);byte[] receiveData = new byte[1024];System.out.println("广播接收端已启动,等待广播消息...");// 接收数据包DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);socket.receive(receivePacket);// 处理接收到的数据String message = new String(receivePacket.getData(), 0, receivePacket.getLength());System.out.println("收到广播消息:" + message);// 关闭Socketsocket.close();} catch (Exception e) {e.printStackTrace();}}
}

在上述代码中,广播发送端将数据发送到广播地址255.255.255.255的指定端口,局域网内监听该端口的其他设备都可以接收到这条广播消息。

七、总结

Java网络编程为我们提供了丰富的工具和协议,让我们能够实现各种复杂的网络应用。通过理解计算机网络的基础概念,掌握套接字编程、TCP/UDP通信编程以及广播通信等技术,我们能够开发出高效、稳定的网络程序。在实际开发中,我们需要根据具体的需求和场景,选择合适的协议和编程方式,确保数据能够准确、高效地在网络中传输。希望本文能够帮助大家更好地理解和应用Java网络编程技术,开启网络编程的新征程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88595.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88595.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/88595.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3.2 前端动态分页算法

文章目录背景思路页面情况核心代码小结效果背景 1. 后台接口只是动态返回一个数组的数据,前端需要根据数据量的大小判断是否需要分页,页面高度固定2. 页面根据页数大小有不同的展示a. 只有一页 头部 内容 统计 尾部b. 多页i. 第一页 头部 内容 尾…

UC浏览器PC版自2016年后未再更新不支持vue3

win uc浏览器,点击页面触发异常。UC浏览器PC版自2016年后未再更新(最新版本停留在Chromium 50内核)。其内置内核版本较低(如Trident/Blink旧版),无法支持Vue 3等现代前端框架的语法特性(如ES6、…

亚古数据:澳大利亚公司的ABN和ACN号码是什么?

在跨国商业的迷宫中,了解目标市场的公司注册细节是一项不可或缺的技能。对于与中国企业有业务往来的朋友们来说,澳大利亚这片充满机遇的土地上,两个缩写——ABN与ACN,如同解锁合作之门的密钥,显得尤为重要。今天&#…

LangChain框架 Prompts、Agents 应用

目录 (Prompts)提示作用 Prompts 常见操作 基础 PromptTemplate 使用 Few-shot 提示模板 ChatPromptTemplate (对话提示模板) (Agents)代理作用 Agents 常见操作 基础 Agent 使用 自定义工具 Agent 高级应用示例 带记忆的对话代理 使用本地模型的代理 结构化输出代…

模拟实现unordered_map

1.定义unordered_map 是 C 标准库中的哈希表容器,特点是无序存储、平均 O (1) 时间复杂度的插入 / 查找 / 删除操作。其核心原理是通过哈希函数将关键字映射到哈希桶(bucket),再通过链表或红黑树处理哈希冲突。2.实现原理1. 哈希表…

史上最详细Java并发多线程(面试必备,一篇足矣)

第一章:线程基础 1.1 线程与进程 进程:系统资源分配的基本单位,拥有独立的内存空间 线程:CPU调度的基本单位,共享进程内存空间 关系:一个进程可包含多个线程,线程切换成本远低于进程 1.2 线程的…

【DataFlow】数据合成流水线工具

1.整体解读 核心思想:以数据为中心的AI(Data-Centric AI) DataFlow 的核心目标是通过一系列自动化“流水线”(Pipelines)来处理和生成高质量的数据,从而提升大语言模型(LLM)在特定领…

Hangfire 调用报错解决方案总结

System.ArgumentNullException: 值不能为 null 错误在使用 Hangfire 时确实是一个常见问题,特别是在配置 Hangfire 服务器时。问题分析这个错误通常发生在以下情况:没有正确配置 Hangfire 服务器队列配置缺失或不正确连接字符串配置问题解决方案要点正确…

MySQL的使用

MySQL的使用一、mysql中的周边命令1. 检查版本2. 查看字符集3. 查看客户端连接4. 查看最后一条警告消息二、数据库、数据表的管理1. 语法规则2. 数据库2.1 查看数据库2.2 创建数据库2.3 选择数据库2.4 查看创建数据库命令2.5 创建库时添加字符集2.6 修改数据库字符集2.7 删除数…

2025Nginx最新版讲解/面试

维护系统多服务器部署,将我们请求代理到各个服务器。代理正向代理,代理对象是我们的客户端,目标对象不知道我们用户。VPN就是典型的正向代理。反向代理,代理对象是服务端,用户不知道服务端具体信息。而这正是Nginx所做…

JAVASCRIPT 前端数据库-V8--仙盟数据库架构-—-—仙盟创梦IDE

老版本 在v1 版本中我们讲述了 基础版的应用 JAVASCRIPT 前端数据库-V1--仙盟数据库架构-—-—仙盟创梦IDE-CSDN博客 接下载我们做一个更复杂的的其他场景 由于,V1查询字段必须 id 接下来我们修改了了代码 JAVASCRIPT 前端数据库-V2--仙盟数据库架构-—-—仙盟创…

UNIX 域套接字实现本地进程间通信

🚀 使用 UNIX 域套接字 (AF_UNIX) 实现高效进程通信 在 Linux 和其他类 UNIX 系统中,进程间通信 (IPC) 的方法有很多种,例如管道、消息队列、共享内存等。然而,当你的应用程序需要在 同一台机器上的不同进程间进行高效、低延迟的数…

【Axure教程】中继器间图片的传递

中继器在Axure中可以作为图片保存的数据库,在实际系统中,我们经常需要将选择数据库的图片添加到其他图片列表中,所以今天就教大家,怎么在Axure中实现中继器之间的图片传递,包含将一个中继器中的图片列表传递到另一个中…

专题:2025云计算与AI技术研究趋势报告|附200+份报告PDF、原数据表汇总下载

原文链接:https://tecdat.cn/?p42935 关键词:2025, 云计算,AI 技术,市场趋势,深度学习,公有云,研究报告 云计算和 AI 技术正以肉眼可见的速度重塑商业世界。过去十年,全球云服务收…

从代码学习深度强化学习 - PPO PyTorch版

文章目录 前言PPO 算法简介从 TRPO 到 PPOPPO 的两种形式:惩罚与截断代码实践:PPO 解决离散动作空间问题 (CartPole)环境与工具函数定义策略与价值网络PPO 智能体核心实现训练与结果代码实践:PPO 解决连续动作空间问题 (Pendulum)环境准备适用于连续动作的网络PPO 智能体 (连…

PortsWiggerLab: Blind OS command injection with output redirection

实验目的This lab contains a blind OS command injection vulnerability in the feedback function.The application executes a shell command containing the user-supplied details. The output from the command is not returned in the response. However, you can use o…

星云穿越与超光速飞行特效的前端实现原理与实践

文章目录 1,引言2,特效设计思路3,技术原理解析1. 星点的三维分布2. 视角推进与星点运动3. 三维到二维的投影4. 星点的视觉表现5. 色彩与模糊处理4,关键实现流程图5,应用场景与优化建议6,总结1,引言 在现代网页开发中,炫酷的视觉特效不仅能提升用户体验,还能为产品增添…

【Linux】C++项目分层架构:核心三层与关键辅助

C 项目分层架构全指南:核心三层 关键辅助一、核心三层架构 传统的三层架构(或三层体系结构)是构建健壮系统的基石,包括以下三层: 1. 表现层(Presentation Layer) 负责展示和输入处理&#xff0…

【机器学习】保序回归平滑校准算法

保序回归平滑校准算法(SIR)通过分桶合并线性插值解决广告预估偏差问题,核心是保持原始排序下纠偏。具体步骤:1)按预估分升序分桶,统计每个分桶的后验CTR;2)合并逆序桶重新计算均值&a…

项目开发日记

框架整理学习UIMgr&#xff1a;一、数据结构与算法 1.1 关键数据结构成员变量类型说明m_CtrlsList<PageInfo>当前正在显示的所有 UI 页面m_CachesList<PageInfo>已打开过、但现在不显示的页面&#xff08;缓存池&#xff09; 1.2 算法逻辑查找缓存页面&#xff1a;…