网络编程基础学习

Posted on 2021-03-04 18:04  CodeSky&木子  阅读(91)  评论(0)    收藏  举报

网络编程

1.1,概述

信件:

计算机网络:

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

网络编程的目的:

无线电台...传播交流信息,数据交换,通信

如何达到这个目的:

1,如何准确的定位网络上的一台主机 :通过端口,定位这个计算机上的某个资源

1.2,网络通信是要素

实现网络的通信要素

通信双方的地址:

  • ip
  • 端口号

例如:ip:192.168.16.124:端口:5900 这俩个可确定一台主机

规则:网络通信的协议

实际应用的是Tcp/ip协议

小结:

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

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

2,网络编程中的要素:

  • Ip和端口号
  • 网络通信协议

3,万物皆对象

1.3,IP

IP地址:InetAddress

  • 唯一定位一台主机
  • 127.0.0.1:本机localhost
  • 网段通常被用作 loopback 网络接口的默认地址,按惯例通常设置为 127.0.0.1。这个地址在其他计算机上不能访问,就算你想访问,访问的也是自己,因为每台带有TCP/IP协议栈的设备基本上都有 localhost/127.0.0.1。
  • 本机地址通常指的是绑定在物理或虚拟网络接口上的IP地址,可供其他设备访问到。
  • ip地址的分类
    • ipv4/ipv6
      • ipv4 127.0.0.1,4个字节组成,0~255,大概有42亿个,30亿在北美,4亿在亚洲,2011年已经用尽。
      • ipv6:128位,8个无符号整数2001:3CA1:010F:001A:121B:0000:0000:0010
    • 公网(互联网)-私网(局域网)
      • 192.168xx.xx.专门给组织内部使用的
  • 域名:记忆ip问题
    • 由于IP地址具有不方便记忆并且不能显示地址组织的名称和性质等缺点,人们设计出了域名,并通过网域名称系统(DNS,Domain Name System)来将域名和IP地址相互[映射],使人更方便地访问[互联网,而不用去记住能够被机器直接读取的[IP地址]数串。
    • www.baidu.com
 InetAddress inetAddress = InetAddress.getByName("localhost");
            System.out.println(inetAddress);
            InetAddress inetAddress2 = InetAddress.getLocalHost();
            System.out.println(inetAddress2);
            //查询网站地址
            InetAddress inetAddress3=InetAddress.getByName("www.baidu.com");
            System.out.println(inetAddress3);

1.4,端口

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

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

  • 被规定电脑可运行软件个数范围:0~65535

  • 分成Tcp端口和UDp端口,每一个都可运行上面的范围个软件,单个协议下端口号不能冲突。

  • 端口分类

    • 共有端口 0~1023

      • HTTP:80
      • HTTPS:443
      • FTP:21
      • TELENT:23
    • 程序注册端口1024~49151,分配用户或者程序

      • MySQL:3306
      • Oracle:1521
    • 动态,私有:49152~65535

    • DOS命令

      netstat -ano查看所有的端口

      netastat-ano|findstr"5900"查看指定的端口

 //创建一个代表IP地址和端口类的对象
        InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1",5900);
        //获取ip地址
        System.out.println(inetSocketAddress.getAddress());
        //获得端口号
        System.out.println(inetSocketAddress.getPort());

InetAddress和InetSocketAddress两个的区别:

端口连接示意图:

1.5,通信协议

协议:相当于约定

网络通信协议:速率,传输码率,代码结构......

TCP/IP协议簇(实际是一组协议)

  • TCP:用户传输协议
  • UDP:用户数据报协议
  • IP:网络互连协议

TCP,UDP对比:

TCP:相当于打电话

  • 连接,稳定

  • 三次握手,四次挥手

    形象的例子:

  • 客户端和服务端
  • 传输完成,释放连接,效率低

UDP:发短信

  • 不连接,不稳定
  • 客户端,服务端,没有明确的界限
  • 不管你准备好没有都可以发给你
  • 例子:DDOS:洪水攻击(饱和攻击)

1.6,TCP

客户端

  1. 连接服务器Socket
  2. 发送信息

服务端

  1. 建立服务端口ServeSocket
  2. 等待用户的连接accept
  3. 接受用户的消息

1.7,UDP

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

没有服务端和客户端,只有接受端和发送端

例子:

咨询对话:两个人既可以是发送方也可以是接受方

发送端:

  while (true) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                String msg = reader.readLine();
                if (msg.equals("byes")) {
                    break;
                }
                byte send[] = msg.getBytes();
                DatagramPacket packet = new DatagramPacket(send, 0, send.length, ip, ToPort);
                socket2.send(packet);
            }

接受端:

   while (true) {
                byte receive[] = new byte[1024];
                DatagramPacket packet1 = new DatagramPacket(receive, 0, receive.length);
                socket1.receive(packet1);
                String str = new String(packet1.getData(), 0, receive.length);
                if (str.equals("byes")) {
                    break;
                }
                System.out.println(Name+":"+str);
            }

1.8,URL

https://www.baidu.com/

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

DNS域名解析 www.baidu.com 其实在随后解析成 xxx.x.x.x ip

URL格式:

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

可少不可多

下载资源:

//下载地址
URL url = new URL("https://ws.stream.qqmusic.qq.com/C400002jNyoG3FhJQt.m4a?guid=3555602880&vkey=48D2CCE9EBB23959128153711A261B815D9DE40F0AB04A24F297851FCFD13EA123AC7B674E0478E660F1C724B10B139E0F17D90E568E0E80&uin=0&fromtag=66");
//连接这个资源 HTTP
 httpURLConnection=(HttpURLConnection) url.openConnection();
 inputStream=httpURLConnection.getInputStream();
 fileOutputStream=new FileOutputStream("a song");
int len;
byte buffer[]=new byte[1024];
while ((len=inputStream.read(buffer))!=-1){
    fileOutputStream.write(buffer,0,len);
}