Java网络编程初阶

简介: 本文系统讲解Java网络编程基础,涵盖网络三要素(IP、端口、协议)及TCP/UDP核心原理,提供完整发送端与接收端代码实现,并附实操步骤与注意事项,适合初学者入门学习。(239字)

前言

本文介绍最初的java网络编程

在后面会更新练习的内容,在练习的内容来更深入理解网络编程

🏠我的主页:我的主页
📚系列专栏:系列专栏

一、 初始网络编程

网络编程顾名思义,就是在网络中的发送端和接收端进行通信
用到网络就先了解一下网络

二、 相关网络知识介绍

这里我会介绍,网络编程会用到的网络相关知识,更全面次的网络知识,后期会发布的😊

1. 网络三要素

1.1. IP

IP就是在广域网中唯一标识( 是的,在广域网中可以通过IP知道用的是什么设备 )
在网络中,分为

  1. 局域网
  2. 城域网
  3. 广域网

所以这里强调的是在广域网中的唯一标识

1.1.1. IPv4

特点:点分十进制
例如: 192.168.1.1
特殊IP:127.0.0.1(表示本机IP)
可以通过以下步骤查到本机ip

  1. win + r
  2. 输入cmd

       3. 输入 ipconfig


IPv4一共有4^32个,现在是已经用完了,但是我们在网络通信中,基本上还是用的IPv4

1.1.2. IPv6

因为IPv4用完了,现在很多地方都用了IPV6,之后也会变普遍的
特点:冒分十六进制
例如: 00-01-00-11-2E-83-2E-0E-28-C5-F8-3D-49-47
有2^128个

1.2. 端口号

端口号:应用程序在设备中的唯一标识

这就和IP对应上了,可以这样理解

  • IP 这台设备
  • 端口号 就是这台设备上的某个应用程序

端口号的取值范围:0 ~ 65535
其中,0 ~ 1023 之间的端口号用于一些知名的网络服务或应用
我们使用 1024以上的端口号即可

1.3. 协议

协议:通信双方必须遵守的约定(规则)
因为本次网络编程只会涉及两个协议:TCP、UDP

1.2.1. TCP

TCP(传输控制协议)
是面向连接的
特点:速度慢,没有大小限制,数据是安全的
需要通信双方确立连接
应用:下载软件,发送邮件(因为这些不能让数据丢失)

1.2.2. UDP

UDP(用户数据报协议)
是面向无连接的
特点:一次最多发送64KB,数据不安全,易丢失
应用:打视频电话(反正就是卡一下而已)
UDP是只管发,不管你有没有接收到

接下来,就围绕网络三要素以及两个网络协议来分别讲解,网路编程的实现

三、网络编程的实现

1. UDP的网络编程实现

1.1. 发送端

步骤

  1. 创建 DatagramSocket
    绑定端口
    绑定端口,就是从这个端口发送数据
    没有端口,就是从任意端口发出
    因为是发出的数据,所以不用写
  2. 打包数据
    DatagramPacket
  3. 发送数据
  4. 释放资源

DatagramPacket包含的4个内容

//发送数据
//1. 创建DatagramSocket对象
DatagramSocket host;
try {
    // 绑定端口,就是从这个端口发送数据
    // 没有端口,就是从任意端口发出
    host = new DatagramSocket();
} catch (SocketException e) {
    throw new RuntimeException(e);
}
//2. 打包数据
String str = "欢迎来到艺杯羹的博客!";
// 转成字节数组
byte[] bytestr = str.getBytes();
//获取ip(电脑)对象地址
InetAddress address = InetAddress.getByName("192.168.1.50");
// 发送的端口号
int post = 8888;
// 打包数据中包含以下四个内容
// 1. 打包的字节数据
// 2. 打包的个数
// 3. 打包的地址
// 4. 打包的端口
DatagramPacket packet = new DatagramPacket(bytestr, bytestr.length, address, post);
//3. 发送数据
try {
    host.send(packet);
} catch (IOException e) {
    throw new RuntimeException(e);
}
//4.释放资源
host.close();
}

1.2. 接收端

步骤

  1. 创建 DatagramSocket
    这里要指定接收的端口
    绑定的端口一定要跟发送的端口保持一致
  2. 接收数据包
  3. 解析数据包
  4. 释放资源

public static void main(String[] args) throws SocketException {
        // 创建Datagramsocket对象
        // 注意:
        //在接收的时候,一定要绑定端口
        //而且绑定的端口一定要跟发送的端口保持一致
        DatagramSocket receive = new DatagramSocket(8080);
        // 2.接收数据包
        // 因为是字节,所以就先弄一个字节数组来接收数据
        byte[] str = new byte[1024];
        // 创建接收的DatagramPacket包
        // 空号里的两个值是
        // 1. 存放到哪个字节数组
        // 2. 存放的长度
        DatagramPacket data = new DatagramPacket(str, str.length);
        try {
            // 接收数据
            receive.receive(data);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        
        // 3. 解析数据包
        // getData()返回发送来的数据
        byte[] data1 = data.getData();
        // 返回发送端的端口号
        int port = data.getPort();
        // 返回发送端的地址
        InetAddress address = data.getAddress();
        // 返回数据的长度
        int len = data.getLength();
        System.out.println("地址和端口为:" + address + "  " + port);
        System.out.println("接收的数据为" + new String(data1, 0, len) +"   " + "长度为:" + len);
        // 4. 释放资源
        receive.close();
    }

先自己实现一遍这个代码,再往后看😊

2. TCP的网络编程实现

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象
在开始通信之前,要保证连接已经建立
通过Socket产生的IO流来进行网络通信

1.1. 客户端

步骤

  1. 建立IP和端口的连接
    这里要提供服务端的IP和端口
  2. 获取输出流
    要通过 创建的socket的对象
    内部的getOutputStream()输出流函数
    通过write写数据
  3. 关闭socket
// 1.建立IP和端口的连接
Socket socket = new Socket("127.0.0.1", 8080);
//2.获取输出流
OutputStream out = socket.getOutputStream();
//写数据
 out.write("Hillo!!!".getBytes());
//3.关闭
out.close();

1.2. 服务端

步骤

  1. 创建ServerSocket对象
  2. 同意接受 ,监听客户端的连接
  3. 从连接同道中获取输入流读取对象
  4. 释放
//1.创建ServerSocket对象
ServerSocket server = new ServerSocket(8080);
//2.同意接受 ,监听客户端的连接
Socket socket = server.accept();
//3.从连接通道中获取输入流读取对象
InputStream input = socket.getInputStream();
int b;
while((b = input.read()) != -1){
   System.out.print((char)b);
}
//4.释放
socket.close();
server.close();
1.2.1. 乱码问题

这是最简洁的代码,如果是中文,可能会出现乱码
那么,现在来改进一下代码

在第三步的位置,把接受的代码改成

InputStream input = socket.getInputStream();
InputStreamReader ins = new InputStreamReader(input);
BufferedReader buffer = new BufferedReader(ins);
// 写成一行
BufferedReader buffer = new BufferedReader(new InputStreamReader(socket.getInputStream()));

总结

到现在为止,简单的TCP 和 UDP 的发送端和接收端就可以实现了

还有进阶的,是放在练习里,在不久之后会更新

目录
相关文章
|
3月前
|
C语言
输出三角形的题型讲解(一文解决)
本文详解C语言输出三角形的核心思路:将问题拆解为空格数与星号数两个子问题。通过画图找规律,推导出空格数为`num-i-1`、星号数为`2*i+1`,助你彻底掌握此类题型的通用解法。
227 2
输出三角形的题型讲解(一文解决)
|
云栖大会 开发者
收到阿里云【乘风者计划】博主证书和奖励
收到阿里云【乘风者计划】博主证书和奖励 2023年2月对我来说是一个很好的开端,因为我在1号就收到了阿里云寄给我的【乘风者计划】博主证书和奖励。好兆头啊! 我收到的是我获得的【技术博主】【星级博主】【专家博主】三个的奖品和证书,一快给我寄过来哒!
3511 2
收到阿里云【乘风者计划】博主证书和奖励
|
3月前
|
Java 程序员 应用服务中间件
Maven之初识与安装
本文详解Maven安装与配置全流程:从基础概念、下载安装、环境变量配置到版本验证,助新手一次理清逻辑、顺利完成部署;涵盖一键构建、依赖管理核心功能,并提供交流支持。
249 0
Maven之初识与安装
|
2月前
|
人工智能 前端开发 关系型数据库
AI 都能直接写项目了,编程还值得学吗?聊聊我摸索出的通用突围路线
本文探讨AI时代编程学习的转型路径:强调先掌握变量、逻辑、循环、数组等底层编程思想,夯实语言基础;再分两阶段推进——前期手写为主筑牢根基,后期以AI为引擎实现全链路开发。核心是思维升级,而非语法堆砌。
404 2
|
3月前
|
人工智能 前端开发 Docker
Vibecoding 没钱上线?Cloudflare + Docker + ngrok 零成本全栈部署指南
本文介绍零成本部署全栈项目的实战方案:前端用Cloudflare Pages免费托管,后端本地Docker运行,通过ngrok内网穿透实现公网访问。全程无需服务器、不绑信用卡,规避ICP备案,适合学生和预算有限的开发者。
485 1
Vibecoding 没钱上线?Cloudflare + Docker + ngrok 零成本全栈部署指南
|
3月前
|
Java 数据库连接 数据库
MyBatis 之关联查询(一对一、一对多及多对多实现)
本文详解MyBatis关联查询:涵盖一对一(association)、一对多(collection)及多对多(本质为两个一对多)的映射配置与实战示例,含实体设计、XML映射、SQL编写及测试代码,助开发者高效处理表间关系。
228 0
MyBatis 之关联查询(一对一、一对多及多对多实现)
|
3月前
|
NoSQL 前端开发 安全
零成本邮件验证码全链路拆解,附最新 QQ 邮箱 SMTP 授权码完整步骤
本文详解个人项目“词帆CiFan”中邮件验证码功能的完整实现:选用QQ邮箱SMTP零成本方案,涵盖密码重置与账号注销两大核心场景,包含前后端链路设计、Redis降级容错、安全配置避坑(如授权码获取、端口选择、环境变量保护)及AI辅助开发技巧。
373 0
零成本邮件验证码全链路拆解,附最新 QQ 邮箱 SMTP 授权码完整步骤
|
3月前
|
人工智能 JSON 自然语言处理
Vibe Coding实战:从零构建网页3D交互角色
本文详解Vibe Coding(氛围编程)在网页3D开发中的实践:以“2D→3D→网页”标准化流程为核心,结合腾讯混元3D生成高质量可动画模型,再用Three.js嵌入GLB文件实现交互式渲染,并提供完整代码、提示词模板及八大常见坑点解决方案,助力零基础快速落地3D网页应用。
448 0
Vibe Coding实战:从零构建网页3D交互角色
|
3月前
|
监控 Java 数据库连接
SpringBoot3全栈开发实战:从入门到精通的完整指南
本文是SpringBoot3的精要总结,涵盖自动配置、起步依赖、嵌入式服务器等核心特性,详解项目搭建、YAML配置、Web开发、MyBatis整合、热部署、定时任务、Actuator监控及原生镜像等高级功能,并附思维导图助快速复习。
274 0
SpringBoot3全栈开发实战:从入门到精通的完整指南
|
12天前
|
人工智能 安全 测试技术
夯爆了!又一款开源企业级一站式AI智能测试平台!(附平台架构、技术选型)
国庆前AI进化社调研显示:95%企业已启动AI转型,但80%落地集中于知识库、开发提效等浅层场景,深度业务应用不足40%。症结在于“上要结果、下缺能力”。为此推出2026年重磅实战项目——**AI智能测试平台**,覆盖自动化、性能、安全、RAG、Agent等全场景,以分层插件架构+自研AI网关,实现可私有化、可度量、可沉淀的企业级AI测试基础设施。
173 2
夯爆了!又一款开源企业级一站式AI智能测试平台!(附平台架构、技术选型)

热门文章

最新文章