Java基础篇——网络编程

网络编程

网络编程两个首要的问题

IP和端口号

  • ip地址:InetAddress

    127.0.0.1 : 本机localhost

    ip地址的分类

    • ipv4 / ipv6
      • IPV4: 127.0.0.1 4个字节(32位),0~255
      • IPV6:fe80::5478:218a:dd7c:8fd2%17 128位
    • 公网-私网
      • ABCD类地址(阿里面试必问)
      • 192.168.xxx.xxx 局域网地址
    InetAddress ip1 = InetAddress.getByName("www.baidu.com");//返回网站
    InetAddress ip2 = InetAddress.getLocalHost();//返回本机地址
    //地址对象也可以使用很多方法返回自身地址
    ip1.getAddress();
    ip1.getCanonicalHostName();//获取一个规范地址
    
  • 端口:port

    端口代表计算机上一个进程,不同进程的端口号不同,可以之区分,数量为:65535*2,tcp和udp均分

    • 端口分类

      共有端口:

      • HTTP:80
      • HTTPS:443
      • FTP:21
      • Telent:23

      程序注册端口:

      • Tomcat:8080
      • MySQL:3306
      • Oracle:1521...

      动态、私有:...

    //InetSocketAdress类,可实例化
    
  • 通信协议

    TCP:打电话

    UDP:发短息

TCP协议互联

  • 客户端

            //获取服务器信息
            InetAddress client =InetAddress.getByName("127.0.0.1");
            int port = 30240;
            //连接服务器
            Socket link = new Socket(client,port);
            //创建传输流
            OutputStream  os = link.getOutputStream();
            os.write("这里是姬如千泷".getBytes(StandardCharsets.UTF_8));
            link.shutdownOutput();
            //接收服务器信息
            InputStream in = link.getInputStream();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] array1 = new byte[1024];
            int len;
            while((len=in.read(array1))!=-1) {
                baos.write(array1,0,len);
            }
            //关闭连接
    
  • 服务器

    ByteArrayOutputStream read = null;
                //新建端口号
            ServerSocket server = new ServerSocket(30240);
                //获得链接信息
            Socket link = server.accept();
                //创建接收流
            InputStream is = link.getInputStream();
                //创建过渡管道流
            read = new ByteArrayOutputStream();
            byte[] bt = new byte[1024];
            int len;
            while((len= is.read(bt))!=-1){
                read.write(bt,0,len);
            }
            //告诉用户端接收完毕
            OutputStream out = link.getOutputStream();
            out.write("接收完毕,可以退出".getBytes(StandardCharsets.UTF_8));
            //逐个关闭流和链接
            ...
    

UDP协议互联

  • 客户端

    //建立连接
            DatagramSocket client = new DatagramSocket(30240);
            //建包
            InetAddress adress = InetAddress.getLocalHost();
            int port = 30240;
            String str = "hello,Server";
            //装包
            DatagramPacket dp = new DatagramPacket(要写入的字节流,从什么地方开始写入,字节流长度,adress,port);
            //发送
            client.send(dp);
            //关闭
            client.close();
    
  • 服务器

    //开放端口
            DatagramSocket server = new DatagramSocket(30240);
            //接受包
            byte[] buffer = new byte[1024];
            DatagramPacket datagramPacket = new DatagramPacket(buffer, 0, buffer.length);
            server.receive(datagramPacket);
            //关闭端口
            server.close();
    

URL下载资源

  •         //新建一个有效地url
            URL url = new URL("https://p0.ssl.qhimgs1.com/sdr/400__/t01497383325fc41f94.jpg");
            //用http协议连接ip
            HttpURLConnection connection =(HttpURLConnection) url.openConnection();
            InputStream read = connection.getInputStream();
    
            FileOutputStream write = new FileOutputStream("dog.jpg");
            //下载并存储图片
            byte[] buffer = new byte[1024];
            int len;
            while((len= read.read(buffer))!=-1){
                write.write(buffer,0,len);
            }
    
posted @ 2021-03-23 22:46  姬如乀千泷  阅读(40)  评论(0)    收藏  举报