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

Java网络编程基础分享

在学习 Java 的过程中网络编程是非常重要的一环。无论是后端开发、分布式系统、即时通讯、文件传输还是游戏服务、物联网设备都离不开网络通信一、计算机网络基础1.1 什么是计算机网络把不同地理位置、具有独立功能的计算机通过通信设备和传输介质连接起来使用 网络软件协议 实现资源共享和信息传递的系统就叫计算机网络。简单说计算机之间想要互相传数据就必须连网。1.2 网络编程的作用网络编程的作用就是让两台计算机之间能够传输数据。比如聊天软件发消息浏览器访问网页手机 APP 请求服务器文件上传下载远程控制这些都属于网络通信。1.3 网络编程三要素想要实现网络通信必须具备三个要素IP 地址端口号协议1.3.1 IP 地址IP 地址是计算机在网络中的唯一标识。相当于计算机的 “身份证号”。格式192.168.1.100分类IPv432 位表示范围 0~255.0~255.0~255.0~255IPv6128 位解决地址不够用问题特殊 IP127.0.0.1本机回环地址代表自己localhost本机域名1.3.2 端口号端口号是应用程序的标识。一台电脑里有很多软件每个软件都有一个端口号用来区分不同程序。端口号范围0 ~ 65535注意0~1024系统保留端口1024~65535自定义可用1.3.3 协议协议就是计算机之间通信的规则。常见协议TCP传输控制协议UDP用户数据报协议二、网络编程相关 API2.1 InetAddress 类表示 IP作用获取本机 IP、主机名、判断是否可达。常用方法InetAddress.getLocalHost(); // 获取本机 InetAddress.getByName(主机名); // 根据主机名获取 getHostName(); // 获取主机名 getHostAddress(); // 获取IP地址示例代码public class Test1 { public static void main(String[] args) throws UnknownHostException { InetAddress ip InetAddress.getLocalHost(); System.out.println(ip.getHostName()); System.out.println(ip.getHostAddress()); } }运行结果主机名 192.168.xxx.xxx2.2 端口号相关知识端口号用来标识进程应用程序。一个 IP 一个端口 套接字 Socket三、UDP 协议重点3.1 UDP 特点无连接不可靠速度快数据限制 64K不分客户端和服务器只有发送端、接收端适用场景直播、语音、视频、游戏3.2 UDP 通信原理发送端打包数据直接发送接收端开启端口等待接收不保证一定到达速度快3.3 UDP 发送端代码步骤创建发送端 Socket 对象打包数据数据、长度、IP、端口发送数据包释放资源代码public class UDPSend { public static void main(String[] args) throws Exception { DatagramSocket ds new DatagramSocket(); System.out.println(准备发送数据2秒后开始...); Thread.sleep(2000); // 给你确认的时间 String str Hello UDP; byte[] bytes str.getBytes(); InetAddress ip InetAddress.getByName(127.0.0.1); int port 10000; DatagramPacket dp new DatagramPacket(bytes, bytes.length, ip, port); ds.send(dp); System.out.println(数据已发送); ds.close(); } }3.4 UDP 接收端代码步骤创建接收端 Socket必须指定端口创建数据包接收数据接收数据解析数据关闭资源代码public class UDPReceive { public static void main(String[] args) throws Exception { // 绑定10000端口 DatagramSocket ds new DatagramSocket(10000); System.out.println(接收端已启动等待数据...); byte[] bytes new byte[1024]; DatagramPacket dp new DatagramPacket(bytes, bytes.length); // 阻塞等待数据 ds.receive(dp); byte[] data dp.getData(); int len dp.getLength(); System.out.println(收到数据 new String(data, 0, len)); ds.close(); } }运行方式先启动接收端 → 再启动发送端四、TCP 协议重点、面试高频4.1 TCP 特点面向连接可靠传输速度比 UDP 慢无大小限制分为客户端Socket和服务器端ServerSocket适用场景文件传输、浏览器、聊天4.2 TCP 三次握手建立连接作用保证可靠连接过程客户端发送请求服务器响应客户端确认连接4.3 TCP 四次挥手断开连接客户端请求关闭服务器收到服务器准备关闭客户端确认关闭4.4 TCP 客户端代码Socket步骤创建 Socket 对象指定 IP 和端口获取输出流写数据释放资源代码public class TCPClient { public static void main(String[] args) throws Exception { Socket socket new Socket(127.0.0.1, 10000); OutputStream os socket.getOutputStream(); os.write(Hello TCP.getBytes()); os.close(); socket.close(); } }4.5 TCP 服务器代码ServerSocket步骤创建 ServerSocket指定端口调用 accept () 等待客户端连接获取输入流读取数据释放资源代码public class TCPServer { public static void main(String[] args) throws Exception { ServerSocket serverSocket new ServerSocket(10000); Socket socket serverSocket.accept(); InputStream is socket.getInputStream(); byte[] bytes new byte[1024]; int len is.read(bytes); System.out.println(new String(bytes, 0, len)); is.close(); socket.close(); serverSocket.close(); } }运行先启动服务器 → 再启动客户端五、TCP 实战案例文件上传5.1 客户端步骤读取本地文件变成 byte []连接 TCP 服务器IP 端口把文件数据发给服务器发送完毕关闭输出流等待服务器回复 “上传成功”5.2 服务器步骤绑定端口等待客户端连接接收客户端发来的文件数据把数据写入本地保存成文件回复客户端 “上传成功”关闭连接客户端代码public class FileUploadClient { public static void main(String[] args) throws Exception { Socket socket new Socket(127.0.0.1, 10000); FileInputStream fis new FileInputStream(test.txt); OutputStream os socket.getOutputStream(); byte[] bytes new byte[1024]; int len; while ((len fis.read(bytes)) ! -1) { os.write(bytes, 0, len); } socket.shutdownOutput(); fis.close(); socket.close(); } }服务器代码public class FileUploadServer { public static void main(String[] args) throws Exception { ServerSocket serverSocket new ServerSocket(10000); Socket socket serverSocket.accept(); InputStream is socket.getInputStream(); FileOutputStream fos new FileOutputStream(receive.txt); byte[] bytes new byte[1024]; int len; while ((len is.read(bytes)) ! -1) { fos.write(bytes, 0, len); } fos.close(); socket.close(); serverSocket.close(); } }六、TCP 群聊原理简单讲解多个客户端连接服务器服务器使用多线程处理每一个客户端服务器收到消息后转发给所有客户端七、UDP 和 TCP 对比TCP面向连接可靠有客户端服务器速度慢适合文件传输、重要数据UDP无连接不可靠速度快适合直播、视频、游戏八、常见问题与错误总结8.1 连接超时IP 错误端口错误服务器未启动防火墙拦截8.2 端口被占用Address already in use解决换端口或关闭占用程序8.3 先启动客户端报错必须先启动服务器九、文章总结TCP 文件上传实战核心是利用 TCP 的可靠连接特性实现文件从客户端到服务端的完整传输而 UDP 通信则是无连接的数据报传输更适合轻量、低延迟的场景。客户端负责读取本地文件并发送服务端监听端口、接收数据并写入文件两者通过字节流和缓冲区协作完成数据传递UDP 则通过数据包直接收发无需建立连接。实际开发中需根据场景选择合适的协议同时注意端口占用、连接顺序、传输结束标记等问题确保通信稳定、高效

相关文章:

Java网络编程基础分享

在学习 Java 的过程中,网络编程是非常重要的一环。无论是后端开发、分布式系统、即时通讯、文件传输,还是游戏服务、物联网设备,都离不开网络通信一、计算机网络基础1.1 什么是计算机网络把不同地理位置、具有独立功能的计算机,通…...

从无线破解到PDF解密:盘点那些容易被忽略的‘非主流’密码审计场景与工具

密码安全审计的隐秘战场:从无线网络到加密文档的实战指南 当大多数人谈论密码安全时,脑海中浮现的往往是服务器登录、数据库访问这些企业级场景。然而在数字生活的每个角落,从家庭Wi-Fi到工作文档,密码保护的脆弱性同样可能成为安…...

JS中forEach与普通for

for就不用说了,最普通的循环函数forEach1. 只写 1 个参数只接收当前遍历元素let arr [10,20,30] arr.forEach(item > {console.log(item) // 依次 10、20、30 })2. 写 2 个参数依次接收元素值、下标索引let arr [10,20,30] arr.forEach((item, index) > {co…...

国产麒麟系统上编译GDAL 3.2.1踩坑记:从PROJ6依赖缺失到Qt环境集成

麒麟系统GDAL 3.2.1编译实战:PROJ6依赖修复与Qt工程深度集成在国产操作系统生态中部署地理数据处理工具链,往往会遇到比常规Linux发行版更复杂的依赖问题。最近在麒麟系统上为北斗定位项目编译GDAL 3.2.1时,遭遇了经典的"PROJ 6 symbols…...

网安学习第24天 PHP安全——PHP反序列化

一、序列化与反序列化 1、序列化serialize() 序列化是什么?序列化就是把程序中的对象、数组、结构体等复杂数据,转换成可以存储或传输的格式。 简单说: 把“内存里的对象”变成“字符串/字节流”。 例如 PHP 中有一个对象: $u…...

用ESP32-C3的PWM做个RGB呼吸灯吧:从配置结构体到色彩渐变(乐鑫ESP-IDF实战)

ESP32-C3 RGB呼吸灯实战:从PWM配置到色彩渐变算法 当智能家居的灯光不再只是简单的开关控制,而是能像呼吸般自然渐变时,整个空间的氛围立刻变得生动起来。ESP32-C3凭借其出色的LED PWM控制器(LEDC)外设,为开…...

Claude Code用户告别封号与Token焦虑,无缝切换至Taotoken平台

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Claude Code用户告别封号与Token焦虑,无缝切换至Taotoken平台 对于依赖Claude Code进行编程辅助的开发者而言&#xff…...

别再纠结了!给激光焊接新手讲透单模和多模激光到底怎么选(附M²因子解读)

激光焊接设备选型指南:单模与多模激光的实战抉择 当你第一次站在激光焊接设备采购的十字路口,面对"单模"和"多模"这两个专业术语时,那种迷茫感我深有体会。五年前,我作为产线技术负责人,需要为汽车…...

告别Windows卡顿!在VMware里给Kubuntu 22.04 LTS分区和安装的保姆级避坑指南

告别Windows卡顿!在VMware里给Kubuntu 22.04 LTS分区和安装的保姆级避坑指南你是否已经厌倦了Windows系统越来越慢的启动速度、频繁的后台更新和资源占用?当你的电脑开始频繁卡顿,或许该考虑给系统来一次"减负"了。Kubuntu 22.04 L…...

从数据到模型:手把手教你预处理MPIIFaceGaze和EyeDiap数据集(Python实战)

从数据到模型:手把手教你预处理MPIIFaceGaze和EyeDiap数据集(Python实战)当你第一次打开MPIIFaceGaze或EyeDiap数据集的压缩包时,那种面对杂乱文件夹和神秘.mat文件的迷茫感,我太熟悉了。作为计算机视觉工程师&#xf…...

GEP协议深度解读:AI智能体自我进化的基因工程

OpenAI 官宣全面支持MCP协议,标志着AI应用架构的"连接标准"已定。如果说MCP是AI时代的USB-C,解决了模型与工具的连接问题,那么GEP(Genome Evolution Protocol,基因组进化协议)则正在解决另一个更本质的问题——智能体的自我进化与生命周期管理。 作为下一代AI基…...

别再盲调temperature=0.2!DeepSeek补全效果突变的4个隐藏参数,资深架构师压箱底调参清单

更多请点击: https://intelliparadigm.com 第一章:别再盲调temperature0.2!DeepSeek补全效果突变的4个隐藏参数,资深架构师压箱底调参清单 DeepSeek-R1/VL 等开源大模型在实际部署中,仅靠调节 temperature 往往收效甚…...

Claude Agent SDK 从 0 到 1 快速上手教程

Claude Agent SDK 从 0 到 1 快速上手教程 什么是 Claude Agent SDK? Claude Agent SDK 是 Anthropic 官方推出的用于构建 AI 智能体的开发工具包。它基于 Claude Code 构建,让开发者能够以编程方式创建、扩展和定制由 Claude 驱动的应用程序。与简单的聊天机器人不同,基于…...

Noto字体终极指南:告别“豆腐块“,让全球文字清晰显示

Noto字体终极指南:告别"豆腐块",让全球文字清晰显示 【免费下载链接】noto-fonts Noto fonts, except for CJK and emoji 项目地址: https://gitcode.com/gh_mirrors/no/noto-fonts 在数字世界中,你是否经常看到那些令人困…...

Nacos CVE-2021-29441漏洞深度解析:User-Agent绕过与鉴权失效

1. 这个漏洞不是“改个Header就能登录”,而是Nacos鉴权体系的一道裂缝CVE-2021-29441这个编号在Nacos社区里曾被轻描淡写地归为“低危”,直到我接手一个金融客户线上告警——他们的Nacos集群在凌晨三点被批量创建了37个高权限用户,所有操作日…...

保姆级教程:手把手教你为ESXi 6.7配置主板BIOS(VT-x/VT-d/AES全开)

从零开始:ESXi 6.7主板BIOS设置完全指南当你第一次接触企业级虚拟化平台时,那种既兴奋又忐忑的心情我完全理解。作为过来人,我清楚地记得自己第一次为ESXi配置BIOS时的迷茫——那些专业术语像天书一样,生怕设置错误导致服务器无法…...

遭遇薪酬倒挂后的反向谈判与资产重估策略「蒸汽求职分享」

在 2026 年全球科技大厂与跨国泛金融巨头追求极致人效、频繁进行组织架构重组(Reorg)的买方市场中,一个让无数海外名校留学生在入职两年后心态瞬间崩塌的现象,正在高频发生——“薪酬倒挂(Salary Inversion&#xff09…...

保姆级教程:手把手教你搞定ESXi 6.7安装前的BIOS设置(VT-x/VT-d/AES全开)

从零开始:ESXi 6.7安装前的BIOS设置终极指南当你第一次接触企业级虚拟化平台时,那种既兴奋又忐忑的心情我完全理解。作为过来人,我记得自己第一次在Dell PowerEdge服务器上安装ESXi时,光是搞清楚BIOS里那些晦涩的选项就花了整整一…...

大厂校招变了:AI 能力正在进入笔试和面试

最近不少同学投递校招时,应该已经发现一个变化: 以前 JD 里写的是“熟悉 Python / Java / SQL / Office 优先”。 现在越来越多岗位开始出现新的描述: “熟练使用 AI 工具者优先” “了解大模型应用者优先” “具备 AI 辅助编程经验优先” “…...

别再把大模型当搜索框了:一文讲透 LLM 的基本原理、能力边界与局限性

写在前面很多人把大语言模型当成“会聊天的搜索引擎”,结果一上线就遇到幻觉、口径不稳、上下文丢失、成本失控。真正理解 LLM,要先抓住一句话:它是基于 Transformer 的概率生成模型,核心能力来自海量预训练、上下文学习与后训练对…...

CentOS 8/Stream 8系统DNF换源后,安装软件还是慢?试试这几个排查命令和优化技巧

CentOS 8/Stream 8系统DNF换源后安装缓慢的深度排查与优化指南当你已经按照教程将CentOS 8/Stream 8的DNF源切换为国内镜像,却发现软件安装速度依然不尽如人意时,这种体验确实令人沮丧。作为长期使用CentOS系统的技术专家,我完全理解这种&quo…...

3分钟上手:NBTExplorer终极指南 - 可视化编辑Minecraft游戏数据的免费神器

3分钟上手:NBTExplorer终极指南 - 可视化编辑Minecraft游戏数据的免费神器 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经想要修改Minecraf…...

完整指南:如何在5分钟内快速上手BioAge生物年龄计算工具包

完整指南:如何在5分钟内快速上手BioAge生物年龄计算工具包 【免费下载链接】BioAge Biological Age Calculations Using Several Biomarker Algorithms 项目地址: https://gitcode.com/gh_mirrors/bi/BioAge BioAge生物年龄计算工具包是一款基于R语言开发的强…...

手机也能玩转无人机仿真:用安卓QGC App连接同一WiFi下的PX4 JMAVSim模拟器

手机也能玩转无人机仿真:用安卓QGC App连接同一WiFi下的PX4 JMAVSim模拟器 无人机开发者和爱好者们,是否曾想过用手机就能完成整个无人机仿真测试流程?告别笨重的电脑束缚,只需一部安卓设备,就能在沙发上调试飞控算法。…...

独立开发者利用taotoken模型广场为不同任务选择性价比最优模型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者利用taotoken模型广场为不同任务选择性价比最优模型 对于独立开发者而言,在有限的预算内高效完成多样化的开…...

嵌入式Linux驱动开发 —— 从DTS到代码的桥梁与简单OF系列API(3)

接前一篇文章:嵌入式Linux驱动开发 —— 从DTS到代码的桥梁与简单OF系列API(2) 节点查找 API:如何在设备树中定位目标节点 有了数据结构基础,现在我们可以开始讲具体的API了。第一步是找到你要操作的节点。就像你想操…...

如何优化 MySQL 千万级数据分页查询的性能?

它的本质是:**传统 LIMIT offset, size 在大数据量下性能急剧下降,是因为 MySQL 必须 扫描并丢弃 前 offset 行数据。当 offset 很大时(如 LIMIT 1000000, 10),MySQL 需要读取 1,000,010 行记录,执行 1,000…...

3PEAK思瑞浦 TPA6531-S5TR SOT23-5 运算放大器

特性 供电电压:1.75V至5.5V 偏移电压:1.5mV(最大值) 最大可调工作频率:300kHz,斜率:0.15V/us 轨到轨输入和输出 0.1赫兹至10赫兹电压噪声:1伏峰值 开关电源时无显著输出抖动 低功耗:每通道最大25安培 工作温度范围:-40C至125C...

昇腾NPU模型服务化——从离线模型到高可用推理服务

模型训练完只是第一步。真正产生业务价值的是把模型部署成724小时在线服务——毫秒级延迟、支持动态Batching、能扛住流量洪峰,且具备高可用性。 这篇将手把手教你基于昇腾NPU构建生产级模型推理服务,涵盖框架选型、服务化架构、动态Batching优化、热加载…...

XXPermissions:Android权限管理框架的架构设计与最佳实践

XXPermissions:Android权限管理框架的架构设计与最佳实践 【免费下载链接】XXPermissions Android Permissions Framework, Adapt to Android 16 项目地址: https://gitcode.com/GitHub_Trending/xx/XXPermissions 在Android应用开发中,权限管理一…...