zoukankan      html  css  js  c++  java
  • 什么是网络编程?

    一、什么是网络编程?

    二、协议

    三、实例

    四、TCP协议和UDP协议的区别和联系


     一、什么是网络编程?

    1.在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换
    2.网络编程三要素 :IP地址 、端口、协议(TCP、UDP)

    二、协议

    1.用户数据报协议(User Datagram Protocol)

    • UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。
    • 简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
    • 由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议通常采用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太
      大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。
    • UDP通信原理

      UDP协议是一种不可靠的协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送、接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端服务器的概念

    2.TCP协议

    • 传输控制协议 (Transmission Control Protocol)
    • TCP协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP连接中必须要明确客户端与服务器端,由
      客户端向服务端发出连接请求,每次连接的创建都需要经过三次握手”。
    • 三次握手:TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠第一次握手,客户端向服务器端发出连接请求,等待服务器确认
      第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求
      第三次握手,客户端再次向服务器端发送确认信息,确认连接
    • 完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛。例如上传文件、下载文件、浏览网页 
    • TCP通信原理

      • TCP通信是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一但建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。

      • JAVA基于TCP协议的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生I/O流来进行网络通信

      • JAVA客户端提供了Socket类为服务端提供了ServerSocket类

     

    TCP三次握手过程如下:

     

    三、实例

    1.UDP通信程序

    案例需求
    UDP发送数据:数据来自于键盘录入,直到输入的数据是886,发送数据结束
    UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收

    实现步骤

    • 发送端

      • 创建发送端

      • 自定义数据输入流

      • 创建数据包

      • 发送数据

    • 接收端

      • 创建接收端

      • 创建接收包

      • 接收数据

      • 死循环,接收数据

    • 发送端:代码实现
     1 /**
     2  * UDP通信程序练习,发送端
     3  */
     4 public class SendDemo {
     5     public static void main(String[] args) {
     6         //创建发送端Socket对象
     7         DatagramSocket ds = null;
     8         //自己封装键盘录入数据
     9         BufferedReader br = null;
    10         try {
    11             ds = new DatagramSocket();
    12             br = new BufferedReader(new InputStreamReader(System.in));
    13             String line;
    14             while ((line = br.readLine()) != null) {
    15                 //"886"退出
    16                 if (line.equals("886")) {
    17                     break;
    18                 }
    19                 byte[] bytes = line.getBytes();
    20                 //创建数据包
    21                 DatagramPacket dp = new DatagramPacket(bytes, bytes.length,
    22                         InetAddress.getByName("172.16.0.54"),12345);
    23                 //发送数据
    24                 ds.send(dp);
    25             }
    26         } catch (Exception e) {
    27             e.printStackTrace();
    28         } finally {
    29            if (br != null) {
    30                 try {
    31                     br.close();
    32                 } catch (IOException e) {
    33                     e.printStackTrace();
    34                 }
    35             }
    36             if(ds != null){
    37                 ds.close();
    38             }
    39 
    40         }
    41     }
    42 }
    View Code
    • 接收端
     1 /**
     2  * UDP通信程序练习,接收端
     3  */
     4 public class ReceiveDemo {
     5     public static void main(String[] args) {
     6         //创建接收端Socket对象
     7         DatagramSocket ds = null;
     8         while (true) {
     9             try {
    10                 //指定应用程序接口
    11                 ds = new DatagramSocket(12345);
    12                 byte[] bytes = new byte[1024];
    13                 //创建数据接收包
    14                 DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
    15                 //接收数据
    16                 ds.receive(dp);
    17                 System.out.println("数据:" + new String(dp.getData(), 0, dp.getLength()));
    18             } catch (Exception e) {
    19                 e.printStackTrace();
    20             } finally {
    21                 if (ds != null) {
    22                     ds.close();
    23                 }
    24             }
    25         }
    26     }
    27 }
    View Code

    2.TCP发送数据

    • TCP发送数据步骤

      • 创建客户端的Socket对象

        • Socket(String host, int port)

      • 获取输出流,写数据

        • OutputStream getOutputStream()

        • write()

      • 释放资源

        • void close()

    • 示例代码

       1 /**
       2  * TCP发送数据
       3  */
       4 public class MainClass {
       5     public static void main(String[] args) throws IOException {
       6         //创建客户端
       7         Socket socket = new Socket(InetAddress.getByName("172.16.0.54"),8089);
       8         //获取输出流
       9         OutputStream outputStream = socket.getOutputStream();
      10         outputStream.write("在吗?我来了...".getBytes());
      11         outputStream.close();
      12         socket.close();
      13     }
      14

    TCP接收数据

    • TCP接收数据步骤

      • 创建服务端Socket对象(ServerSocket)

        • ServerSocket(int port)

      • 监听客户端连接,返回一个Socket对象

        • Socket accept() 阻塞方法

      • 获取输入流,读数据,并把数据显示在控制台

        • InputStream getInputStream()

        • read()

      • 释放资源

        • void close()

    • 代码演示

     1 /**
     2  * TCP接收数据
     3  */
     4 public class MainClass {
     5     public static void main(String[] args) throws IOException {
     6         //创建服务端
     7         ServerSocket serverSocket = new ServerSocket(8089);
     8         //侦听连接
     9         Socket accept = serverSocket.accept();
    10         //获取输入流
    11         InputStream inputStream = accept.getInputStream();
    12         byte[] bytes = new byte[1024];
    13         int len = inputStream.read(bytes);
    14         String str = new String(bytes, 0, len);
    15         inputStream.close();
    16         serverSocket.close();
    17         System.out.println("数据:" + str);
    18         
    19     }
    20 }

    四、TCP协议和UDP协议的区别和联系

  • 相关阅读:
    面向接口程序设计思想实践
    Block Chain Learning Notes
    ECMAScript 6.0
    Etcd Learning Notes
    Travis CI Build Continuous Integration
    Markdown Learning Notes
    SPRING MICROSERVICES IN ACTION
    Java Interview Questions Summary
    Node.js Learning Notes
    Apache Thrift Learning Notes
  • 原文地址:https://www.cnblogs.com/aaaazzzz/p/12794276.html
Copyright © 2011-2022 走看看