狂神说:网络编程

课程链接

【狂神说Java】网络编程实战讲解

网络中的包:可以理解为现实中包裹,信封,需要快递员送到我们的手上
丢包:可以理解为包裹在运输途中丢失
单机:无网,没有与其他电脑资源共享
网络编程的目的:无线电台,传播交流信息,数据交换,通信
IP:用来定位另一台主机
端口:用来定位另一台主机上的某一个应用,比如qq,一个端口对应计算机的一个程序进程
协议:主机之间的交流的规则,就像人与人之间的交流,语言就是协议
物理层:比如网线
数据链路层:可能是有线的,也可能是无线的
127.0.0.1:本机localhost,没有网络也能Ping的IP
.com国际域名
.cn国内域名
URL:统一资源定位符,用来定位互联网上的资源
网络上的一切都是流

查找百度的IP地址

ping www.baidu.com

在这里插入图片描述
jdk中有InetAddress类

IP地址是由IP使用的32位或128位无符号数字,构建UDP和TCP协议的低级协议。 IP地址结构由定义RFC 790: Assigned Numbers , RFC 1918: Address Allocation for Private Internets , RFC 2365: Administratively Scoped IP Multicast和RFC 2373: IP Version 6 Addressing Architecture 。 InetAddress的一个实例由一个IP地址和可能的相应主机名组成(取决于它是用主机名构造还是已经完成了反向主机名解析)。

在这里插入图片描述
ipconfig查看本地IP
IPV4:127.0.01 ,4个字节组成,0~255,总共42亿;30亿都在北美,亚洲4亿,2011年就已经用尽
IPV6:128位。16个字节,8个无符号整数。2001:acca:0ac1:0002:0ab7:1153:2210:ccc1
通过采用IPV6,我们甚至可以给地球上的每一粒沙子都分配一个IP,IP在地球爆炸之前都用不完

ip地址abcde类怎么区分

A类网络的IP地址范围为:1.0.0.1-126.255.255.254;

B类网络的IP地址范围为:128.1.0.1-191.255.255.254;

C类网络的IP地址范围为:192.0.1.1-223.255.255.254
在这里插入图片描述

在这里插入图片描述

可以看到InetAddress这个类没有构造方法,所以无法new,但是我们可以通过静态方法返回本身来拿到这个类,这是一种创建对象的方式

端口对应计算机中一个程序进程,不同的进程有不同的端口!用来区分软件!计算机的端口号限制在0-65535,也就是说电脑最多能跑65535个进程,单个协议下,端口号不能冲突,但是不同的协议可以占用同一个端口号,tcp : 80, udp : 80 这样不影响,所以这样就有65535*2个端口可以用了

在这里插入图片描述

查看IDEA端口
新建一个html,然后在浏览器打开,可以看到是63342

在这里插入图片描述

netstat -ano #查看所有的端口
netstat -ano|findstr "5900" #查看指定的端口
tasklist|findstr "8696" #查看指定端口的进程

在这里插入图片描述

写一个 TCP

客户端
1.连接服务器Socket
2.发送消息
服务器
1.建立服务的端口ServerSocket
2.等待用户的链接accept
3.接收用户的消息

客户端

 //1.要知道服务器的地址,和端口号
            InetAddress serverIP = InetAddress.getByName("127.0.0.1");
            int port = 9999;
            System.out.println("客户端连接成功");
            //2.创建一个 socket 连接
            socket = new Socket(serverIP,port);
            //3.发送消息 IO 流
            os = socket.getOutputStream();
            os.write("你好,欢迎学习狂神说Java".getBytes());//注意转换成字节流

服务端
写法1:截取字节的话,对于中文容易乱码,关闭资源时,先打开的资源后关闭

 //创建一个接收数据的byte[]数组,及数组的有效长度len
            byte[] buffer = new byte[1024];
            int len;
            while ((len = is.read(buffer))!=-1){//中文容易乱码
                String msg = new String(buffer,0,len);
                System.out.println(msg);
            }*/

如果无法关闭资源,就提升作用域到全局

        InputStreamReader inputStreamReader = null;
        BufferedReader bufferedReader = null;
        InputStream inputStream = null;

写法2:

在这里插入图片描述

写一个UDP

类:DataGramPacket

客户端

public class UdpClientDemo01 {
    public static void main(String[] args) throws Exception {
        //1.建立一个socket
        DatagramSocket socket = new DatagramSocket(8080);
        //1.2建立一个能发送的包
        //发送的数据,地址
        String msg = "你好啊,服务器!";
        InetAddress localhost = InetAddress.getByName("localhost");
        int port = 9090;
        //包的内容:数据,数据长度,要发送给谁
        DatagramPacket packet = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,localhost,port);
        //2.发送包
        socket.send(packet);
        //关闭流
        socket.close();
    }
}

服务端

public class UdpServerDemo02 {
    public static void main(String[] args) throws Exception {
        //开放段
        //等待客户端的连接
        DatagramSocket socket = new DatagramSocket(9090);
        //接收数据包
        byte[] buffer = new byte[1024]; //接收临时区域
        DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);

        //阻塞接收
        socket.receive(packet);

        System.out.println(packet.getAddress().getHostAddress());
        System.out.println(new String(packet.getData(),0,packet.getLength()));

        //关闭流
        socket.close();

    }
}

模拟聊天室

可以用cmd运行写好的class文件,然后IDEA再运行一个程序,模拟聊天双方
在这里插入图片描述
在这里插入图片描述

下载网络资源

举例:下载音乐

在这里插入图片描述

/**
 * Created by 此生辽阔 on 2021/4/5 21:31
 */
public class urlDownload {
    public static void main(String[] args) throws Exception {
        //1.下载地址
        URL url = new URL("https://m701.music.126.net/20210405215338/89fe7645fc520631222bfa8c732081c4/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/7937683494/31e2/2771/3eef/e1a6f0f79db893a61118d620b204384f.m4a");

        //2.连接到这个资源 HTTP
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        //3.输入流
        InputStream inputStream = urlConnection.getInputStream();
        //4.下载到存放地址
        FileOutputStream fos = new FileOutputStream("E:/download/f.m4a");
        //5.写出数据
        byte[] buffer = new byte[1024];
        int len ;
        while((len = inputStream.read(buffer))!=-1){
            fos.write(buffer,0,len);
        }
        fos.close();
        inputStream.close();
        urlConnection.disconnect(); //断开连接

    }
}

在这里插入图片描述

推荐阅读

网络编程—狂神说java学习笔记
狂神说Java:网络编程

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值