JAVA入门——网络编程简介

发布于:2025-03-06 ⋅ 阅读:(20) ⋅ 点赞:(0)

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

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

一、基本概念

网络编程三要素:

  • 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()

三次握手和四次挥手:

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