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 则通过数据包直接收发无需建立连接。实际开发中需根据场景选择合适的协议同时注意端口占用、连接顺序、传输结束标记等问题确保通信稳定、高效