美文网首页
Topic26(网络编程)

Topic26(网络编程)

作者: KaveeDJ | 来源:发表于2019-02-04 13:31 被阅读25次

26.01 网络编程概述

  • A:计算机网络
    • 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
  • B:网络编程
    • 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。

26.02 网络编程三要素之IP概述

  • 每个设备在网络中的唯一标识
  • 每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址。
  • ipconfig:查看本机IP192.168.12.42
  • ping:测试连接192.168.40.62
  • 本地回路地址:127.0.0.1 255.255.255.255是广播地址
  • IPv4:4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽。
  • IPv6:8组,每组4个16进制数。
  • 1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f
  • 1a2b::aaaa:0000:0000:0000:aabb:1f2f
  • 1a2b:0000:aaaa::aabb:1f2f
  • 1a2b:0000:aaaa::0000:aabb:1f2f
  • 1a2b:0000:aaaa:0000::aabb:1f2f

26.03 网络编程三要素之端口号概述

  • 每个程序在设备上的唯一标识
  • 每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到哪台机器上,还要明确发到哪个程序。
  • 端口号范围从0-65535
  • 编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。
  • 常用端口
    • mysql: 3306
    • oracle: 1521
    • web: 80
    • tomcat: 8080
    • QQ: 4000
    • feiQ: 2425

26.04 网络编程三要素协议

  • 为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
  • UDP
    • 面向无连接,数据不安全,速度快。不区分客户端与服务端。
  • TCP
      * 面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。
    • 三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据

26.05 Socket通信原理图解

  • A:Socket套接字概述:
    • 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
    • 通信的两端都有Socket。
    • 网络通信其实就是Socket间的通信。
    • 数据在两个Socket间通过IO流传输。
    • Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。

26.06 UDP传输

  • 1.发送Send
    • 创建DatagramSocket, 随机端口号
    • 创建DatagramPacket, 指定数据, 长度, 地址, 端口
    • 使用DatagramSocket发送DatagramPacket
    • 关闭DatagramSocket
  • 2.接收Receive
    • 创建DatagramSocket, 指定端口号
    • 创建DatagramPacket, 指定数组, 长度
    • 使用DatagramSocket接收DatagramPacket
    • 关闭DatagramSocket
    • 从DatagramPacket中获取数据
  • 3.接收方获取ip和端口号
    • String ip = packet.getAddress().getHostAddress();
    • int port = packet.getPort();

26.07 UDP传输优化

  • 接收端Receive

  •   DatagramSocket socket = new DatagramSocket(6666);                       //创建socket相当于创建码头
      DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);       //创建packet相当于创建集装箱
      
      while(true) {
          socket.receive(packet);                                             //接收货物
          byte[] arr = packet.getData();
          int len = packet.getLength();
          String ip = packet.getAddress().getHostAddress();
          System.out.println(ip + ":" + new String(arr,0,len));
      }
    
  • 发送端Send

      DatagramSocket socket = new DatagramSocket();       //创建socket相当于创建码头
      Scanner sc = new Scanner(System.in);
      
      while(true) {
          String str = sc.nextLine();
          if("quit".equals(str))
              break;
          DatagramPacket packet =                             //创建packet相当于创建集装箱
                  new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
          socket.send(packet);            //发货
      }
      socket.close();
    

26.08 UDP传输多线程

  • A发送和接收在一个窗口完成

      public class Demo3_MoreThread {
    
          /**
           * @param args
           */
          public static void main(String[] args) {
              new Receive().start();
              
              new Send().start();
          }
      
      }
    
      class Receive extends Thread {
          public void run() {
              try {
                  DatagramSocket socket = new DatagramSocket(6666);                   //创建socket相当于创建码头
                  DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);   //创建packet相当于创建集装箱
                  
                  while(true) {
                      socket.receive(packet);                                             //接收货物
                      byte[] arr = packet.getData();
                      int len = packet.getLength();
                      String ip = packet.getAddress().getHostAddress();
                      System.out.println(ip + ":" + new String(arr,0,len));
                  }
              } catch (IOException e) {
                  
                  e.printStackTrace();
              }
          }
      }
    
      class Send extends Thread {
          public void run() {
              try {
                  DatagramSocket socket = new DatagramSocket();       //创建socket相当于创建码头
                  Scanner sc = new Scanner(System.in);
                  
                  while(true) {
                      String str = sc.nextLine();
                      if("quit".equals(str))
                          break;
                      DatagramPacket packet =                             //创建packet相当于创建集装箱
                              new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
                      socket.send(packet);            //发货
                  }
                  socket.close();
              }  catch (IOException e) {
                  
                  e.printStackTrace();
              }
          }
      }
    

26.09 UDP聊天图形化界面

26.10 UDP聊天发送功能

26.11 UDP聊天记录功能

26.12 UDP聊天清屏功能

26.13 UDP聊天震动功能

26.14 UDP聊天快捷键和代码优化

26.15 UDP聊天生成jar文件

26.16 TCP协议

  • 1.客户端
    • 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
    • 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
    • 输入流可以读取服务端输出流写出的数据
    • 输出流可以写出数据到服务端的输入流
  • 2.服务端
    • 创建ServerSocket(需要指定端口号)
    • 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
    • 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
    • 输入流可以读取客户端输出流写出的数据
    • 输出流可以写出数据到客户端的输入流

26.17 TCP协议代码优化

  • 客户端

      Socket socket = new Socket("127.0.0.1", 9999);      //创建Socket指定ip地址和端口号
      InputStream is = socket.getInputStream();           //获取输入流
      OutputStream os = socket.getOutputStream();         //获取输出流
      BufferedReader br = new BufferedReader(new InputStreamReader(is));
      PrintStream ps = new PrintStream(os);
      
      System.out.println(br.readLine());
      ps.println("我想报名就业班");
      System.out.println(br.readLine());
      ps.println("爷不学了");
      socket.close();
    
  • 服务端

      ServerSocket server = new ServerSocket(9999);   //创建服务器
      Socket socket = server.accept();                //接受客户端的请求
      InputStream is = socket.getInputStream();       //获取输入流
      OutputStream os = socket.getOutputStream();     //获取输出流
      
      BufferedReader br = new BufferedReader(new InputStreamReader(is));
      PrintStream ps = new PrintStream(os);
      
      ps.println("欢迎咨询传智播客");
      System.out.println(br.readLine());
      ps.println("报满了,请报下一期吧");
      System.out.println(br.readLine());
      server.close();
      socket.close();
    

26.18 服务端是多线程的

ServerSocket server = new ServerSocket(9999);   //创建服务器
    while(true) {
        final Socket socket = server.accept();              //接受客户端的请求
        new Thread() {
            public void run() {
                try {
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInput Stream()));
                    PrintStream ps = new PrintStream(socket.getOutputStream());
                    ps.println("欢迎咨询传智播客");
                    System.out.println(br.readLine());
                    ps.println("报满了,请报下一期吧");
                    System.out.println(br.readLine());
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}

26.19 网络编程

  • 客户端向服务器写字符串(键盘录入),服务器(多线程)将字符串反转后写回,客户端再次读取到是反转后的字符串

26.20 练习

  • 客户端向服务器上传文件

相关文章

  • Topic26(网络编程)

    26.01 网络编程概述 A:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接...

  • Android 网络编程 目录

    Android 网络编程 目录 Android 网络编程1 Http协议Android 网络编程2 Okhttp缓...

  • Linux网络编程篇之ICMP协议分析及ping程序实现

    Linux网络编程系列: Linux网络编程篇之Socket编程预备知识 Linux网络编程篇之TCP协议分析及聊...

  • iOS关于HTTP协议和网络编程

    1.网络编程 1>什么是网络编程? 网络编程,是我们iOS程序开发者针对网络模块进行得代码编程,是作为一个资深开发...

  • 网络编程

    网络编程 网络编程: 网络编程主要用于解决计算机与计算机(手机、平板..)之间的数据传输问题。 网络编程: 不需要...

  • 网络基本了解

    网络基础 问题:为什么要学习网络编程?(1)网络编程是一种实时更新应用数据的常用手段(2)网络编程是开发优秀网络应...

  • Android应用开发:网络编程2

    网络编程 Java基础:网络编程 Uri、URL、UriMatcher、ContentUris详解 Android...

  • Http协议

    网络编程 Java基础:网络编程 Uri、URL、UriMatcher、ContentUris详解 Android...

  • 网络编程,TCP,UDP

    day26笔记【网络编程,TCP,UDP】 day26授课目录: 1_网络编程(网络编程概述)(了解) A:计算机...

  • P8架构师告诉你身为程序员必备的技能之一TCP/IP网络编程

    网络编程:操作系统+系统编程知识+TCP/IP网络数据传输协议大部分软件是基于网络环境开发的,因此,网络编程成为程...

网友评论

      本文标题:Topic26(网络编程)

      本文链接:https://www.haomeiwen.com/subject/bsppsqtx.html