【Java】网络编程


网络编程是什么?

计算机与计算机之间的程序进行数据传输


一、网络编程三要素

  • IP:
    计算机之间互相通信,作为每台计算机的指定标识。设备的标识

  • 端口:
    应用程序之间的通信,为每个应用程序的指定标识。应用程序的标识

  • 协议 :
    计算机之间通信时需要遵守的规则,对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。
    比如UDP/TCP/HTTP/HTTPS 协议

二、IP

计算机设备在网络中的地址,唯一的标识。

IP地址分为两大类:

  • IPv4
    给每个连接在网络上的主机分配一个32bit地址。
    按照TCP/IP规定,IP地址用二进制来表示,每个IP地址长32bit,也就是4个字节。

  • IPv6
    采用128位地址长度,每16个字节一组,分成8组十六进制数
    解决了网络地址资源数量不够的问题

DOS常用命令:

  • ipconfig:查看本机IP地址
  • ping IP地址:检查网络是否连通

特殊IP地址:

  • 127.0.0.1:是回送地址,永远代表本机地址,一般用来测试使用

三、端口号

设备上应用程序的唯一标识。

两个字节表示的整数,它的取值范围是0~65535。
其中,0~1023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。
如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败

一个端口号一个应用程序

四、协议

网络通信协议
协议

UDP协议

  • 用户数据报协议(User Datagram Protocol)
  • 面向无连接通信协议。(也就是不会确定是否连接成功,直接甩数据过去)
  • 速度快,有大小限制一次最多发送64k,数据不安全,易丢失数据。

TCP协议

  • 传输控制协议 (Transmission Control Protocol)
  • 面向连接的通信协议。(传送数据之间,会先判断是否连接成功)
  • 速度慢,没有大小限制,数据安全。

五、InetAddress 工具类

此类表示互联网协议 (IP) 地址。 内部方法可以获取本机IP地址与设备名称等
工具类
设备

六、UDP协议

UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象

DatagramSocket类作为基于UDP协议的Socket

DatagramSocket API构造方法:
API
没有指定端口号,会随机指定一个空闲的端口。

DatagramPacket :此类表示数据报包。

数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。不对包投递做出保证。
API

1. 发送数据

//测试类
        DatagramSocket ds = new DatagramSocket();//创建发送数据的端口 建立连接
        //数据 地址 端口号 
        String str = "你好!";
        byte[] bytes = str.getBytes();
        InetAddress address = InetAddress.getByName("127.0.0.1");
        int port = 10086;
        //传递
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length,address,port);
        //发送
        ds.send(dp);
        ds.close();

2. 接收数据

        DatagramSocket ds = new DatagramSocket(10086);//接收数据的端口

        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        ds.receive(dp);

        byte[] data = dp.getData();
        InetAddress address = dp.getAddress();
        int port = dp.getPort();
        int len = dp.getLength();

        System.out.println("数据为 " + new String(data, 0, len));
        System.out.println("从这个地址 " + address + " 这个端口 " + port + "发送的数据");

        ds.close();

先运行接收端(开启receive接收等待), 然后再运行发送端!
运行
发送端口是随机指定空闲的端口 ,我们 只需要确定 它发送给了10086 这个端口(并且我们从10086这个端口接收数据)即可。

使用UDP建立简单聊天室

需求:
UDP发送数据:数据来自于键盘录入,直到输入的数据是886,发送数据结束
UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收

//接收端
        DatagramSocket ds = new DatagramSocket(15050);

        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        while (true) {
   
   
            ds.receive(dp);

            byte[] data = dp.getData();
            int len = dp.getLength();
            int port = dp.getPort();
            InetAddress address = dp.getAddress(); // 地址包括(主机名+IP)
            String name = address
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值