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

JAVA入门——网络编程简介

自己学习时的笔记,可能有点水( 

以后可能还会补充(大概率不会)

一、基本概念

网络编程三要素:

  • IP
    • 设备在网络中的唯一标识
  • 端口号
    • 应用软件在设备中的唯一标识
    • 两个字节表示的整数,0~1023用于知名的网络服务和应用,其他的可以自己使用
    • 注意:一个端口号只能由一个应用程序使用
  • 协议
    • 数据在网络中的传输规则

IP细节

  • IPv4:互联网通信协议第四版,采取32位地址长度,分为四组,每组转成十进制,中间用“点”隔开,注意没有负数
    • 只有四十多亿个,2019年就不够用了,所以出现了IPv6
  • IPv4地址分类形式:
    • 公网地址
    • 私有地址(局域网)
      • 192.168.开头的地址
    • 特殊IP:127.0.0.1,本机IP,localhost
  • IPv6:采取128位地址长度,分成八组
    • 采取冒分十六进制表示法
    • 0位压缩法:如果中间有很多0,可以压缩不写
      • 例:FF01:0:0:0:0:0:0:FF02可以写成FF01::FF02

常用CMD命令

ipconfig:查看本机IP

ping:检查网络是否连通

二、InetAddress类的使用

public class MyInetAddressTest1 {

    public static void main(String[] args) throws UnknownHostException {

        //1.确定主机名称的IP地址
        InetAddress i = InetAddress.getByName("LAPTOP-8614VVAT");//填主机名或IP地址
        System.out.println(i);

        System.out.println(i.getHostName());

        System.out.println(i.getHostAddress());

    }
}

三、UDP协议

1.发送数据

UDP协议的发送,不管有没有建立连接都会发送,不一定能接收到

步骤:

  • 创建发送端的DatagramSocket对象
  • 数据打包(DatagramPacket)
  • 发送数据
  • 释放资源
import java.io.IOException;
import java.net.*;

public class SendMessage {

    public static void main(String[] args) throws IOException {

        //1.创建对象
        //空参:随机使用一个端口进行发送
        //带参:指定端口号进行绑定
        DatagramSocket ds = new DatagramSocket();

        //2.打包数据
        String str = "114514王俊阳没有牛牛";
        byte[] bytes = str.getBytes();

        InetAddress address = InetAddress.getByName("127.0.0.1");//本机IP
        int port = 10086;//端口号
        
        //3.发送数据
        ds.send(new DatagramPacket(bytes,bytes.length,address,port));
        
        //4.释放资源
        ds.close();

    }
}

2.接收数据

步骤:

  • 创建接收端的DatagramSocket对象
  • 接收打包好的数据
  • 解析数据包
  • 释放资源

细节:

  • receive方法是阻塞的,会等待消息发送过来
  • 注意先启动接收端,再启动发送端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class ReceiveMessage {

    public static void main(String[] args) throws IOException {

        //1.创建接收端口
        //注意:一定要绑定端口,并且绑定的端口要与发送端口保持一致
        DatagramSocket ds = new DatagramSocket(10086);

        //2.接收
        byte[] buf = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf, buf.length);
        ds.receive(dp);

        //3.解析数据包
        byte[] data = dp.getData();//获取发来的数据
        int len = dp.getLength();//发来多少数据
        int port = dp.getPort();//端口号
        InetAddress address = dp.getAddress();//IP地址

        System.out.println("接收到数据" + new String(data,0,len));
        System.out.println("该数据从" + address + "这台电脑中的" + port + "端口发出的");

        ds.close();
    }
}

3.UDP协议的三种通信方式

1.单播

  • 1对1发送与接收数据

2.组播

  • 给一组电脑发送信息
  • 组播地址:224.0.0.0~239.255.255.255
    • 其中224.0.0.0~224.0.0.255是预留地址,可以我们自己用
  • 创建对象时要创建MulticastSocket对象,指定InetAddress时要指定组播的地址

3.广播

  • 给局域网中所有电脑发送数据    
    • 地址:255.255.255.255

四、TCP协议

  • 一种可靠的网络协议,他会在通信的两端分别建立一个Socket对象
  • 通信前要保证连接已经建立
  • 通过Socket产生IO流来进行网络通讯

客户端步骤:

  • 创建Socket对象与指定服务端连接
    • Socket(String host,int port)
  • 获取输出流,写数据
    • OutputStream getOutputStream()
  • 释放资源
    • void clear()

服务器步骤:

  • 创建服务器端的Socket对象
    • ServerSocket(int port)
  • 监听客户端连接,返回一个Socket对象
    • Socket accept()
  • 从Socket对象中获取输入流,读数据,并把数据显示在控制台
    • InputStream getInputStream()
  • 释放资源
    • void clear()

三次握手和四次挥手:

  • 三次握手:为了保证连接的确立
    • 客户端向服务端发出连接请求,等待服务器确认
    • 服务器向客户端返回一个响应,告诉客户端收到了请求
    • 客户端向服务端再次发出确认信息,建立连接
  • 四次挥手:确保连接断开且数据处理完毕
    • 客户端向服务端发出取消链接请求
    • 服务端返回一个响应,表示受到请求
      • 此时不会断开,会将流中最后的数据处理完毕
    • 服务器向客户端发出确认取消的信息
    • 客户端再次发出确认信息,链接取消

相关文章:

  • coze 工作流微博关键词爬虫
  • ES中数据刷新策略refresh
  • SYSTEM文件夹下的文件
  • 什么是XSS,什么是CSP,什么是gevent
  • 文件压缩与解压工具7-Zip的安装和使用(免费)
  • 期权帮|2025年股指期货最新规则是什么?
  • Dify 开源大语言模型应用开发平台使用(一)
  • 使用Python和Transformer模型进行土壤水热模拟与预测的基本示例
  • Jasper AI技术浅析(六):关键词优化与 SEO 生成
  • 【IDEA】IDEA常用的VM配置,优化配置让开发过程更顺畅
  • Android ChatOn-v1.66.536-598-[构建于ChatGPT和GPT-4o之上]
  • vue3 vite 两种监听pinia状态变化的方式比较:watch, $subscribe
  • rust编程实战:实现3d粒子渲染wasm
  • Leetcode 112: 路径总和
  • diffuser库使用本地模型生成图像
  • MagicDriveDiT:具有自适应控制的自动驾驶高分辨率长视频生成
  • 树莓集团南京新项目:百度百科更新背后的战略意图
  • C 语 言 --- 猜 数 字 游 戏
  • MDM 如何彻底改变医疗设备的远程管理
  • 二、Java-封装playwright UI自动化(根据官网执行步骤,首先封装BrowserFactory枚举类及BrowserManager)
  • 杨建全已任天津市委副秘书长、市委市政府信访办主任
  • 泽连斯基已离开土耳其安卡拉
  • 辽宁盘山县一乡镇幼儿园四名老师被指多次殴打一女童,均被行拘
  • 把中国声音带向世界,DG和Blue Note落户中国
  • 商务部回应稀土出口管制问题
  • 全国人大常委会今年将初次审议检察公益诉讼法