Java——零基础速成学习

Posted 知code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java——零基础速成学习相关的知识,希望对你有一定的参考价值。


三天回顾Java——零基础速成实战

第二天 初识Java入门基础(下)

11.网络编程

InetAddress  	 获取地址
InetAddress.getCanonicalHostName		规范的名字
InetAddress.getHostAddress		IP
InetAddress.getHostName		域名或自己电脑的名字
InetSocketAddress		实现 IP 地址及端口
InetAddress				实现 IP 地址
ServerSocket				建立服务的端口
.accept						阻塞监听等待连接
Socket						创建连接
.getInputStream				获取IO输入流
.getOutputStream			获取IO输出流
ByteArrayOutputStream		byte类型数组管道输出流
FileOutputStream		文件字符输出流
FileInputStream			文件字符输入流
shutdownOutput			停止输出
DatagramSocket			数据包端口
DatagramPacket			数据包
.send			发送
.receive		阻塞接收
BufferedReader			缓存区读取
InputStreamReader		输入流读取
.readLine				读取的一行内容
URL			统一资源定位符
.openConnection				打开连接
HttpURLConnection			指定协议HTTP

11.1、概述

  • 计算机网络

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统

11.2、网络通信的要素

如何实现网络的通信?

通信双方地址:

  • ip
  • 端口号
  • 192.168.16,124:5900

规则:网络通信的协议

http, ftp, smtp, tcp,udp…

TCP/IP参考模型:

小结

1.网络编程中有两个主要的问题

  • 如何准确的定位到网络上的一台或者多台主机

  • 找到主机之后如何进行通信

2.网络编程中的要素

  • IP 和 端口号 IP
  • 网络通信协议 udp,tcp

3.万物皆对象

  • IP和网络通信协议都可以生成对象

11.3、IP

ip地址:InetAddress

  1. 唯一定位一台网络上计算机

  2. 127.0.0.1:本机Iocalhost

  3. ip地址的分类

  • ipv4/ipv6

    • IPV4:127.0.01 ,4个字节组成,0~255,总共42亿;30亿都在北美,亚洲4亿,2011年就已经用尽
    • IPV6:128位。8个无符号整数。2001:acca:0ac1:0002:0ab7:1153:2210:ccc1
  • 公网(互联网)-私网(局域网)

    • ABCD类地址

    • 192.168.xxx.xx 专门给组织内部使用

  1. 域名:记忆IP问题
  • IP:www.xxx.com 方便记录
InetAddress  	 获取地址
InetAddress.getCanonicalHostName		规范的名字
InetAddress.getHostAddress		IP
InetAddress.getHostName		域名或自己电脑的名字


11.4、端口

端口表示计算机上的一个程序的进程;

  • 不同的进程有不同的端口!用来区分软件!

  • 被规定0~65535,不能使用相同的端口

  • TCP,UDP:65535*2,tcp : 80, udp : 80 这样不影响。单个协议下,端口号不能冲突

  • 端口分类

    • 公有端口 0~1023 (尽量不用)
      • HTTP:80
      • HTTPS:443
      • FTP:21
      • Telent:23
    • 程序注册端口:1024~49151,分配用户或者程序
      • Tomcat:8080
      • mysql:3306
      • Oracle:1521
    • 动态、私有:49152~65535(尽量不用)
netstat -ano #查看所有的端口
netstat -ano|findstr "5900" #查看指定的端口
tasklist|findstr "8696" #查看指定端口的进程

找到电脑上特定端口,或有其对应的处理程序,才能收到发出的程序

InetSocketAddress		 IP 地址及端口
InetAddress				 IP 地址

11.5、通信协议

协议:约定,双方使用相同可识别的语言

**网络通信协议:**速率、传输码率、代码结构、传输控制… …

主要使用:**TCP/IP协议簇:**实际上是一组协议

主要:

  • TCP:用户传输协议 类似于打电话,需要两边进行连接
  • UDP:用户数据报协议 类似于发短信,不需要两边连接也可以发出,但不一定能送到

出名的协议:

  • TCP:
  • IP:网络互连协议
11.5.1TCP UDP 对比
  1. TCP:打电话
  • 连接、稳定
  • 三次握手 四次挥手
最少需要三次,保证稳定连接
A——	我要连接 ——>B
B—— 你可以连接 ——>A
A—— 那我连接了 ——>B
连接成功!

四次挥手
A——我要断开——>B
B——你可以断开——>A

B——你确定断开?——>A
A——我确定断开!——>B
连接断开

  • 客户端、服务端:主动和被动的过程
  • 传输完成,释放连接,效率低
  1. UDP:发短信
    • 不连接、不稳定
    • 客户端、服务端:没有明确的界限
    • 不管有没有准备好,都可以发给你
    • DDOS:洪水攻击!(饱和攻击)

11.6、TCP

服务器

  • 建立服务的端口 ServerSocket
  • 等待用户的连接 accept
  • 接收用户的信息
11.6.1文件上传

服务器端

    import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpClientDemo02 
    public static void main(String[] args) throws IOException 
        //1.创建服务
        ServerSocket serverSocket = new ServerSocket(9000);
        //2.监听客户端的连接
        System.out.println("等待连接");
        Socket socket = serverSocket.accept();  //阻塞式监听,会一直等待客户端连接
        //3.获取输入流
        InputStream is = socket.getInputStream();
        //文件输出
        FileOutputStream fos = new FileOutputStream(new File("666.jpg"));
        byte[] buffer = new byte[1024];
        int len;
        while ((len=is.read(buffer))!=-1)
            fos.write(buffer,0,len);
        
        /*
            客户端传输完了,服务器接收完
            通知客户端我接收完毕了
         */
        //服务器端接收完毕,并回复信息
        OutputStream os = socket.getOutputStream();
        os.write("我接收完毕,你可以断开".getBytes());
    //关闭资源
    os.close();
    fos.close();
    is.close();
    socket.close();
    serverSocket.close();


客户端

   import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

public class TcpServerDemo02 
    public static void main(String[] args) throws Exception 
        //1.创建一个Socket连接
        // Socket(主机--端口号)
        //InetAddress.getByNam(主机--IP地址)
        Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
        //2.创建一个输出流
        OutputStream os = socket.getOutputStream();
        //3.读取文件
        FileInputStream fis = new FileInputStream(new File("321.jpg"));
        //4.写出文件
        byte[] buffer = new byte[1024];
        int len;
        while((len = fis.read(buffer))!=-1)
            os.write(buffer,0,len);
        
        /*
            传输完后,通知服务器
            确定服务器接收完毕,才能断开连接
         */
        //客户端已经传输完毕
        socket.shutdownOutput();
        //接收服务端完毕信息
        InputStream inputStream = socket.getInputStream();
        //由于收到的式String byte[]数组,使用byte输出管道流
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer2 = new byte[1024];
        int len2;
        while((len2 = inputStream.read(buffer))!=-1)
            baos.write(buffer,0,len2);
        
        System.out.println(baos.toString());
   //关闭资源
    baos.close();
    inputStream.close();
    fis.close();
    os.close();
    socket.close();

FileOutputStream		文件输出流
FileInputStream			文件输入流
shutdownOutput			停止输出
11.6.2Tomcat

服务端

  • 自定义 S
  • Tomcat 服务器 S :Java 后台开发!

客户端

  • 自定义 C
  • 浏览器 B

11.7、DUP

发短信:不用连接,只需要知道对方的地址!

11.7.1发送接收消息
11.7.2多线程发送接收消息

发送线程

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

public class TalkSend implements Runnable
        DatagramSocket socket = null;
        BufferedReader reader = null;

        private int fromPort;
        private String toIP;
        private int toPort;


    public TalkSend(int fromPort, String toIP, int toPort) 
        this.fromPort = fromPort;
        this.toIP = toIP;
        this.toPort = toPort;
    
        try 
            socket = new DatagramSocket(fromPort);
         catch (SocketException e) 
            e.printStackTrace();
        


    
    
    @Override
    public void run() 
    
        try 
            while(true)
                //准备数据:控制台读取 System.in
                BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                //发包内数据
                String data = reader.readLine();
                byte[] datas = data.getBytes();
                DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress(this.toIP,this.toPort));
                //发送包
                socket.send(packet);
    
                if (data.equals("bye"))
                    break;
                
            
         catch (Exception e) 
            e.printStackTrace();
        
    
        //关闭流
        socket.close();
    


接收线程

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class TalkReceive implements Runnable
    DatagramSocket socket =null;
    private int port;
    private String msgfrom;

    public TalkReceive(int port, String msgfrom) 
        this.port = port;
        this.msgfrom = msgfrom;
    
        try 
            socket = new DatagramSocket(port);
         catch (SocketException e) 
            e.printStackTrace();
        
    
    
    @Override
    public void run() 
        try 
            while(true)
                //准备接收包裹
                byte[] container = new byte[1024];
                DatagramPacket packet = new DatagramPacket(container,0,container.length);
                //阻塞式接收
                socket.receive(packet);
                //断开连接
                //将接收包转换为 String 格式
                byte[] data = packet.getData();
                String receiveData = new String(data,0,data.length);
                System.out.println(msgfrom+":"+receiveData);
                if (receiveData.equals("bye"))
                    break;
                
            
         catch (Exception e) 
            e.printStackTrace();
        
        socket.close();
    


学生线程

public class TalkStudent 
    public static void main(String[] args) 
        //学生同时开启两个线程
        //学生自己的发送端口、接收IP、接收端口
        new Thread(new TalkSend(6666,"localhost",9999)).start();
        //学生自己接收端口、发送过来者
        new Thread(new TalkReceive(8888,"老师")).start();
    

教师线程

package com.ssxxz.chat;

public class TalkTeacher 
    public static void main(String[] args) 
        //老师
        //老师自己的发送端口、接收IP、接收端口
        new Thread(new TalkSend(7777,"localhost",8888)).start();
        //老师自己接收端口、发送过来者
        new Thread(new TalkReceive(9999,"学生")).start();
    

11.8、URL

https://www.baidu.com/

统一资源定位符:定位资源的,定位互联网上的某一个资源

DNS 域名解析:www.baidu.com == xxx.x…x…x 的IP号

协议:(https) //ip地址:端口/项目名/资源

URL常用方法


public class DRLDemo01 
    public static void main(String[] args) throws MalformedURLException 
        URL url = new URL("http://localhost:8080/helloworld/index.jsp?username=kuangshen&password==123");

        //协议http
        System.out.println(url.getProtocol());
        //主机ip,localhost
        System.out.println(url.getHost());
        //端口,8080
        System.out.println(url.getPort());
        //文件,/helloworld/index.jsp
        System.out.println(url.getPath());
        //全路径,/helloworld/index.jsp?username=kuangshen&password==123
        System.out.println(url.getFile());
        //参数,username=kuangshen&password==123
        System.out.println(url.getQuery());
    


URL网络下载


public class UrlDown 
    public static void main(String[] args) throws Exception 
        //1.下载地址
        URL url = new URL("https://**1.**2.com/**/**/***.jpg");

        //2.连接到这个资源 HTTP
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        //3.输入流
        InputStream inputStream = urlConnection.getInputStream();
        //4.下载到存放地址
        FileOutputStream fos = new FileOutputStream("123.jpg");
        //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(); //断开连接
    
    
    



URL			统一资源定位符
.openConnect

Python如何入门?从零基础到进阶,非常详细的Python速成之路!

之前从未接触过Python,想学Python如何开始学?

不管你是否有编程经验,如果要学习Python这个编程语言,你都得有一个指南针,否则会走很多学习上的弯路。

我就是那个走了很多弯路的人,刚开始学习Python的时候,在网上到处搜集资料,而网络上的资料又特别多,导致在学习的时候找不到主次,浪费了大量的时间。

因此我整理这篇文章,就是希望大家学习的时候有一个明确的学习方向和路径。

Python基础入门

通过以下资料,完成对Python的基本入门。

  1. 为什么要学Python(博文)
  2. Python开发工具的安装和破解(博文)
  3. Python零基础入门教程完整版(视频)
  4. Python零基础入门教程(博文)
  5. 廖雪峰的Python零基础入门教程
  6. Python零基础入门到精通完整版(视频)

Python进阶

  1. Python进阶指南(博文)
  2. python进阶到高阶大全
  3. Python进阶教程(博文)

Python应用实战

  1. Python爬虫实战

    https://pan.baidu.com/s/1Dz9rPQkRw7G99mxlBEgKuQ
    提取码: db1w
    
  2. Python艺术二维码生成器

  3. Python之Django开发博客系统实战

    链接: https://pan.baidu.com/s/1Q8FhLX03zp75cZST8gFx-w 
    提取码: dy3r 
    
  4. 2021年python实战项目从0开发一个Django博客系统附资料共38课

    链接: https://pan.baidu.com/s/1Fwfg51724Zb8Bg5WCoGZRw 
    提取码: 3hje
    

Python爬虫相关资源

  1. awesome-spider 爬虫集合
  2. Python模拟登录&爬虫
  3. Python爬虫代理IP池
  4. Python入门网络爬虫精华版
  5. Python3网络爬虫实战
  6. Requests中文文档
  7. Scrapy中文文档

Python机器学习

  1. AI Learning机器学习实战
  2. Kaggle机器学习之基础学习
  3. 动手学深度学习
  4. 机器学习笔记
  5. Keras中文文档
  6. 机器学习100天联系

Python其他资源

  1. Python中文开发者社区
  2. Python资源大全中文版
  3. GitHub上入门开发项目汇总
  4. Python面试题1
  5. Python面试题2
  6. Python面试题3
  7. Python算法题目刷题

以上是关于Java——零基础速成学习的主要内容,如果未能解决你的问题,请参考以下文章

零基础学Android开发之Java语言学习01-什么是java

极·Java速成教程 -

零基础如何学好Java开发

零基础学Android开发之Java语言学习02-JAVA开发平台搭建

零基础如何转行大数据?系统学习路线在此

零基础,怎么学习Android安卓APP的开发,需要学习哪些知识